首页 > 解决方案 > 使用索引从数组中获取值不起作用 - XSL

问题描述

我已经创建了如下所示的数组。

<xsl:variable name="dispatchLiTotal" as="element()*">
    <xsl:for-each select=" /*/invoice/invline">
        <xsl:if test="/sbo/invoice/invline/deliverytotal">
            <xsl:for-each select="deliverytotal">
                <xsl:value-of select="subtotal" />
            </xsl:for-each>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>

稍后在我的代码中,我从中获取值,但我只能获取像这样的“字符串连接” 171.15136.92128.99128.99126.00131.15124.611

<xsl:value-of select="$dispatchLiTotal" />

正在返回 171.15136.92128.99128.99126.00131.15124.611

<xsl:value-of select="$dispatchLiTotal[1]" />

正在返回错误:javax.xml.transform.TransformerException:java.lang.ClassCastException:类 org.apache.xpath.objects.XRTreeFrag 无法转换为类 org.apache.xpath.objects.XNodeSet (org.apache.xpath.objects .XRTreeFrag 和 org.apache.xpath.objects.XNodeSet 位于加载程序“app”的未命名模块中)

我的期望是 index[1] 返回 171.15

XML 结构。

<sbo>
<invoice>
    <invline>
    </invline>
    <invline>
        <deliverytotal>
            <subtotal>171.15</subtotal>
        </deliverytotal>
    </invline>
    <invline>
    </invline>
    <invline>
        <deliverytotal>
            <subtotal>136.92</subtotal>
        </deliverytotal>
    </invline>
</invoice>

我该怎么做?

标签: xslt

解决方案


看起来好像您只是想用 eg 选择输入元素作为序列或节点集<xsl:variable name="dispatchLiTotal" select="/*/invoice/invline/deliverytotal/subtotal"/>,然后$dispatchLiTotal[1]选择序列或节点集中的第一个元素。这在 XSLT 2/3 或 1 中的工作方式相同,只是技术上在 XSLT 2/3 中您正在处理一个序列,而在 XSLT 1 中它是一个节点集。


推荐阅读