XSL - 在nodepath中使用变量

时间:2014-02-05 18:47:09

标签: java xml apache tomcat xslt

我有一个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

我做错了什么?

1 个答案:

答案 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" />

返回一个节点。