为什么变量在子 xsl:模板中"document-node()"出错?



直接看例子:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:template match="/">
<xsl:variable name="v1" select="." as="document-node()"/>
<xsl:apply-templates select=".//name"/>
</xsl:template>
<xsl:template match="name">
<xsl:variable name="v2" select="." as="document-node()"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>

来源 XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<item>
<name>John</name>
<age>21</age>
</item>
</root>

问题是:变量v1可以很好地声明,但v2有一个错误"变量 $v 2 值的必需项目类型是 document-node((;提供的表达式 (.( 具有项类型元素(Q{}name("。

我在w3c xpath文档中查找了document-node()的定义,它说"document-node((匹配任何文档节点"。2.5.5.2 匹配项目类型和项目。我仍然不明白为什么v2document-node()是错误的.

我做了一个在线测试演示

因为它不是document-node(),所以它是一个element()。请改用element()<xsl:template match="/">匹配document-node()<xsl:template match="name">匹配element()节点。

最新更新