我是XSLT的新手,所以我需要一些澄清。 在这里的许多帖子中,例如this,我看到当我们将模板调用到变量的主体时,应该处理模板,尽管我们在代码中没有引用该变量。 我做了测试,为自己检查。这是一个例子:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:variable name="var">
<xsl:call-template name="my_template"/>
</xsl:variable>
<xsl:value-of select="$var"/>
</xsl:template>
<xsl:template name="my_template">
<tag>
<xsl:value-of select="103"/>
</tag>
</xsl:template>
</xsl:stylesheet>
这是输出:
<?xml version="1.0" encoding="UTF-8"?>103
请注意最后103
,请注意输出中没有标记<tag>
。为什么?
接下来,我从文件中删除此行<xsl:value-of select="$var"/>
并再次进行转换。现在输出是这样的:
<?xml version="1.0" encoding="UTF-8"?>
103
已经消失了。在我看来,模板my_template
从未被处理过。因此,如果声明了变量但未引用该变量,则不处理该变量的值?请介绍一下这个问题。为什么标记tag
没有出现在输出中?
谢谢,请原谅我的英语不好。我希望你能让我感到困惑。
答案 0 :(得分:3)
请注意输出中没有标记。为什么呢?
标签不存在,因为当你这样做时:
<xsl:value-of select="$var"/>
您只输出$var
变量的string-value。您将获得不同的结果:
<xsl:copy-of select="$var"/>
将输出整个变量。
接下来,我从文件中删除了这一行
<xsl:value-of select="$var"/>
...在我看来,模板my_template
从未被处理过。
它可能已经存在并且可能没有 - 这取决于您的处理器。它可能决定它不需要并为自己省去麻烦。