我是xslt的新手,一些基本问题困扰着我。其中之一是:
当我使用xslt 2.0处理器时,样式表中的version="1.0"
意味着什么。即使我(在我的样式表中)非1.0函数,尽管我已经将样式表版本明确声明为1.0,但它仍然被处理。
对我来说,似乎version
属性没有超出信息的属性。
它没有配置处理器。然后它服务于什么?
另一个问题是:
(xslt处理器),(xslt样式表)和(xpath)版本之间是否有任何关系?
提前谢谢。
答案 0 :(得分:2)
请参阅http://www.w3.org/TR/xslt20/#backwards,如果XSLT 2.0处理器支持它,那么version="1.0"
启用向后兼容处理,那么一个主要区别是<xsl:value-of select="foo"/>
输出一个文本节点,其字符串值为第一个选中foo
元素,version="2.0"
将输出所有选定foo
元素的值。
作为示例,请参阅http://xsltransform.net/6r5Gh2R,它处理输入
<?xml version="1.0" encoding="UTF-8"?>
<root>
<items>
<item>foo</item>
<item>bar</item>
</items>
</root>
使用样式表
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<result>
<result version="2.0">
<xsl:apply-templates/>
</result>
<result version="1.0">
<xsl:apply-templates mode="backwards"/>
</result>
</result>
</xsl:template>
<xsl:template match="@*|node()" mode="#all">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="#current"/>
</xsl:copy>
</xsl:template>
<xsl:template match="items">
<xsl:copy>
<xsl:value-of select="item"/>
</xsl:copy>
</xsl:template>
<xsl:template match="items" version="1.0" mode="backwards">
<xsl:copy>
<xsl:value-of select="item"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
其中两个template match="items"
处于不同模式且一个模板使用version="1.0"
,样式表的结果为
<?xml version="1.0" encoding="UTF-8"?>
<result>
<result version="2.0">
<root>
<items>foo bar</items>
</root>
</result>
<result version="1.0">
<root>
<items>foo</items>
</root>
</result>
</result>
根据value-of select="item"
显示version
评估的差异。