Ваша проблема здесь :
<xsl:for-each select="nametitle">
<xsl:if test="text()='MyTitle2'">
<xsl:apply-templates select="nametitle" />
</xsl:if>
</xsl:for-each>
Если тест пройден успешно, шаблоны будут применены к дочернему элементу nametitle
текущего узла.
Однако текущий узел - nametitle
, и у него нет nametitle
дочерних элементов - поэтому узлы не выбраны и шаблоны не применяются.
Решение :
Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="nametable[nametitle = 'MyTitle2']/*">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<Section>
<Chapter>
<Head>Heading</Head>
<nametable>
<nametitle>MyTitle</nametitle>
<namedomain>MyDomain</namedomain>
<namevalue>value1</namevalue>
</nametable>
<nametable>
<nametitle>MyTitle2</nametitle>
<namedomain>MyDomain2</namedomain>
<namevalue>value2</namevalue>
</nametable>
</Chapter>
</Section>
дает желаемый, правильный результат :
MyTitle2
MyDomain2
value2