模板规则处理的差异XSLT 1.0 vs 2.0(bis)

时间:2012-02-16 13:59:18

标签: xslt-2.0 xslt-1.0

Diff 1.0 vs 2.0。那个问题已经解决了,但对我来说,首先引起这个问题仍然有点神秘 现在我可能找到了一些东西,但需要帮助了解正在发生的事情 我将输入xml简化为

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Manager>
        <Employee grade="9"/>
        <Employee grade="8"/>
    </Manager>
    <Manager>
        <Employee grade="9"/>
        <Employee grade="8"/>
        <Employee grade="4"/>
    </Manager>
</root>

我在此输入中应用的样式表是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <root>
            <xsl:apply-templates select="root/Manager"/>
        </root>
    </xsl:template>

    <xsl:template match="Manager">
        <test><xsl:value-of select="Employee/@grade"/></test>
    </xsl:template>
</xsl:stylesheet>

输出

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <test>9</test>
    <test>9</test>
</root>

但是在XSLT 2.0模式下运行转换(将stylesheet / @ version更改为“2.0”),输出

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <test>9 8</test>
    <test>9 8 4</test>
</root>

我想知道XSLT 1.0和XSLT 2.0的确切差异导致了这一点。

1 个答案:

答案 0 :(得分:1)

对于第一个区别,我确实用XSLT 2.0解释了比较运算符,如小于或大于或小于或等于等等,默认比较字符串,而使用XSLT 1.0,这些运算符仅为数字定义将任何操作数转换为数字。

对于这篇文章,区别在于XSLT 1.0 xsl:value-of select="foo"输出foo元素的选定节点集中第一个foo元素的字符串值,而XSLT 2.0则具有更改后,如果选择了序列,则输出序列中项的字符串值的空格分隔列表。您可以在XSLT 2.0中更改与separator xsl:value-of属性一起使用的分隔符(即空格)。另请参阅http://www.w3.org/TR/xslt20/#incompatibilities