是在声明时实例化的变量

时间:2015-10-08 18:28:17

标签: xml xslt

我是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没有出现在输出中?

谢谢,请原谅我的英语不好。我希望你能让我感到困惑。

1 个答案:

答案 0 :(得分:3)

  

请注意输出中没有标记。为什么呢?

标签不存在,因为当你这样做时:

<xsl:value-of select="$var"/>

您只输出$var变量的string-value。您将获得不同的结果:

<xsl:copy-of select="$var"/>

将输出整个变量。

  

接下来,我从文件中删除了这一行<xsl:value-of select="$var"/> ...在我看来,模板my_template从未被处理过。

它可能已经存在并且可能没有 - 这取决于您的处理器。它可能决定它不需要并为自己省去麻烦。