У меня проблема с xsl: apply-templates.Я пытаюсь применить шаблон к одному конкретному тегу, но вижу текст из других тегов.Простой XML-файл:
<?xml version="1.0"?>
<!-- execute with xsltproc foo.xsl foo.xml -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" />
<xsl:template match="/foo">
<xsl:for-each select="bar">
<xsl:value-of select="grill"/>
<xsl:apply-templates match="baz"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="foo">[<xsl:value-of select="." />|http://example.com/<xsl:value-of select="." />]</xsl:template>
</xsl:stylesheet>
Входные данные:
<?xml version="1.0"?>
<foo>
<bar>
<baz>a <foo>b</foo> c</baz>
<grill>grill</grill>
</bar>
</foo>
Выходные данные:
grill
a [b|http://example.com/b] c
grill
Я ожидал, что результат будет
grill
a [b|http://example.com/b] c
(мне пока не нужны проблемы с пробелами)
Я могу обойти эту проблему, обернув xsl: apply-templates с xsl: for-each:
<xsl:for-each select="grill">
<xsl:apply-templates match="grill"/>
</xsl:for-each>
Но мне действительно не нравится это решение.Есть ли лучший способ?