Saxon错误“XPTY0019:'/'的第一个操作数的必需项类型是node();提供的值具有项类型xs:string”

时间:2012-12-28 07:48:03

标签: xslt xslt-2.0 saxon

我有一个XSL程序,它反过来会生成一个XSL程序,这取决于输入可能如下所示:

<xsl:variable name="patterns"/> <!--empty in this particular case-->

<xsl:template name="token">
    <xsl:for-each select="$patterns/pattern">
...

当我然后运行生成的样式表时,撒克逊,保佑其内心,显然正在进行某种静态分析并抱怨:

XPTY0019: Required item type of first operand of '/' is node(); supplied value has item type xs:string

甚至不会编译样式表。

我的解决方法是在$ patterns节点集中生成一个虚拟元素,但是这里有更简洁的方法,还是抑制编译错误的方法?

2 个答案:

答案 0 :(得分:1)

根据http://www.w3.org/TR/xslt20/#variable-values,“如果变量绑定元素具有空内容且既没有select属性也没有as属性,则提供的变量值是零长度字符串。”

所以你需要改变它,例如通过执行<xsl:variable name="patterns" select="()"/>将空序列绑定为变量值。

答案 1 :(得分:0)

在XSLT 1.0中(同样适用于XSLT 2.0)使用

<xsl:variable name="patterns" select="/.."/>

这为XSLT处理器提供了必要的信息,以确定$patterns变量的类型是 node-set