我有一个xsl如下
<xsl:variable name="foo" select="concat('some','stuff')" />
<xsl:if test="$foo">
<xsl:element name="hello">
<xsl:attribute name="id">
<xsl:value-of select="-1"/>
</xsl:attribute>
<xsl:element name="region">
<xsl:value-of select="$foo/child"/> <!-- foo is variable, but always has a 'child' node -->
</xsl:element>
</xsl:element>
</xsl:if>
我得到以下输出:
<hello id="-1">
和例外:
java.lang.ClassCastException:org.apache.xpath.objects.XString不兼容 org.apache.xpath.objects.XNodeSet
我做错了什么?
答案 0 :(得分:1)
<xsl:variable name="foo" select="concat('some','stuff')" />
将创建一个值为'somestuff'的字符串。
字符串会改变你的行
<xsl:value-of select="$foo/child"/>
有效地进入
<xsl:value-of select="'somestuff'/child"/>
这不是有效的XPath表达式。
这个字符串不能在任何节点表达式中使用,只能在字符串操作中使用。 替换你的
<xsl:variable name="foo" select="concat('some','stuff')" />
类似
<xsl:variable name="foo" select="./somestuff" />
返回一个节点。