微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xslt 1.0 节点集错误,转换无效

如何解决xslt 1.0 节点集错误,转换无效

我在 1.0 版本中遇到 xslt 问题。 我的节点看起来像这样

...
<Garage>
    <car>
       <color>red</color>
       <color>yellow</color>
       <wheel>left</wheel>
    <car/>
</Garage>
...

然后我将子节点保存到变量中

<xsl:variable name="entries">
    <xsl:if test="$element/Garage/car">
        <xsl:value-of select="$element/Garage/car"/>
    </xsl:if>
</xsl:variable>

当我在模板中使用这个变量时

    <xsl:template name="entriesToString">
        <xsl:param name="table"/>
        <xsl:for-each select="$table/color">
            <xsl:if test="position() = last()">
                <xsl:value-of select="concat(current(),'/')"/>
            </xsl:if>
            <xsl:value-of select="concat(current(),',')"/>
        </xsl:for-each>
    </xsl:template>

我收到这样的错误

ERROR:  'Invalid conversion from 'com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl' to 'node-set'.'

xslt 中节点迭代有问题吗?

解决方法

在 XSLT 1.0 中,xsl:value-of 指令创建一个 文本节点,其值为所选节点中第一个节点的 string-value -设置。

在您的示例中,$entries 变量是一个 result-tree-fragment,其中包含文本 "red yellow left"(带有或不带有一些空白字符)。为了使用 xsl:for-each 指令处理 result-tree-fragment,您必须首先使用特定于处理器的扩展函数将其转换为节点集。无论如何,在这种情况下它对您没有任何好处,因为 - 如上所述 - 它包含一个单个文本节点。

,

使用 <xsl:variable name="entries" select="$element/Garage/car"/> 可能就足够了,这样您就可以在 XPath/XSLT 1 中拥有一个节点集,而无需使用扩展函数。如果路径$element/Garage/car 没有选择任何东西,则节点集为空,如果存在,它包含来自car$element 元素节点,即路径$element/Garage/car 选择了一些东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。