模板规则处理XSLT1.0与2.0的区别(bis)



请参阅差异1.0与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>

但是在XSLT2.0模式下运行转换(将stylesheet/@version更改为"2.0"),输出为

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

我想知道XSLT1.0和XSLT2.0究竟有什么不同。

关于第一个区别,我解释了在XSLT2.0中,比较运算符(如小于或大于、小于或等于等)默认情况下会比较字符串,而在XSLT1.0中,这些运算符只为数字定义,这样可以将任何操作数转换为数字。

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

相关内容

  • 没有找到相关文章

最新更新