2017-10-18 16 views
1

Mon entrée XML est comme la section ci-dessous apparaît sous la partie.Commenter l'élément parent basé sur la chaîne de l'élément enfant dans xslt

<part type="backmatter"> 
<section counter="yes" level="1"> 
<title>Credits<target id="page1301"/></title> 
<section counter="yes" level="2"> 
<title>Chapter 1</title> 
<para><link idref="c001_t003">Table 1-3</link> Adapted from Sidle DM</para> 
...... 
...... 
</section> 
</section> 
<section counter="yes" level="1"> 
<title>Index<target id="page1321"/></title> 
<section counter="yes" level="2"> 
<title>A</title> 
<listing type="dash"> 
<litem><para>Abbé lip switch flap</para> 
</litem> 
<litem><para>Abdomen</para> 
...... 
...... 
</section> 
</section> 
</part> 

sortie devrait être,

<part type="backmatter"> 
<section counter="yes" level="1"> 
<title>Credits<target id="page1301"/></title> 
<section counter="yes" level="2"> 
<title>Chapter 1</title> 
<para><link idref="c001_t003">Table 1-3</link> Adapted from Sidle DM</para> 
...... 
...... 
</section> 
</section> 
<!--<section counter="yes" level="1"> 
<title>Index<target id="page1321"/></title> 
<section counter="yes" level="2"> 
<title>A</title> 
<listing type="dash"> 
<litem> 
<para>Abbé lip switch flap</para></litem> 
<litem><para>Abdomen</para> 
...... 
...... 
</section> 
</section>--> 
</part> 

Mon xslt est,

<xsl:template match="section">   
<xsl:choose> 
<xsl:when test="following-sibling::title[contains(., 'Index')]"> 
<xsl:text disable-output-escaping="yes">&lt;!--</xsl:text> 
<xsl:copy><xsl:apply-templates select="node() | @*"/> </xsl:copy> 
<xsl:text disable-output-escaping="yes">--&gt;</xsl:text> 
</xsl:when> 
<xsl:otherwise> 
<xsl:copy><xsl:apply-templates select="node() | @*"/> </xsl:copy> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:template> 

Je veux commenter la "section" chaque fois que le titre contient la chaîne 'Index' et la section restante devrait être comme c'est en xml. Pourriez-vous s'il vous plaît nous aider à résoudre ce problème?

Répondre

2

Il fonctionne presque, il vous suffit de changer votre état un peu:

<xsl:choose> 
    <xsl:when test="contains(title, 'Index')"> 
    <xsl:text disable-output-escaping="yes">&lt;!--</xsl:text> 
    <xsl:copy><xsl:apply-templates select="node() | @*"/></xsl:copy> 
    <xsl:text disable-output-escaping="yes">--&gt;</xsl:text> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:copy><xsl:apply-templates select="node() | @*"/></xsl:copy> 
    </xsl:otherwise> 
</xsl:choose>