请参阅差异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-of
的separator
属性使用的分隔符(即空格)。另请参阅http://www.w3.org/TR/xslt20/#incompatibilities.