You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT中fn:substring()多序列参数报错的解决办法咨询

XSLT substring函数报错解决方法

报错说明

执行XSLT时触发错误:

A sequence of more than one item is not allowed as the first argument of fn:substring()

问题根源

原XSLT中substring(*:Path1/*:Path2,1,500)的第一个参数*:Path1/*:Path2匹配到的是多个Path2节点,而fn:substring()要求第一个参数必须是单一字符串,不能是节点序列——即使把该序列存入变量,变量存储的仍是整个节点集合,因此报错无法解决。

可行解决方法

方法1:遍历每个Path2节点分别处理

如果需要为每个Path2元素生成对应的EB/ID节点,可通过xsl:for-each遍历节点序列,对每个节点单独调用substring:

<xsl:for-each select="*:Path1/*:Path2">
    <xsl:element name="EB">
        <xsl:element name="ID">
            <xsl:value-of select="substring(., 1, 500)"/>
        </xsl:element>
    </xsl:element>
</xsl:for-each>

方法2:拼接所有Path2内容后统一截取

如果需要把所有Path2的文本内容合并成一个字符串再截取前500个字符,可使用string-join()先拼接序列:

<xsl:element name="EB">
    <xsl:element name="ID">
        <xsl:value-of select="substring(string-join(*:Path1/*:Path2, ' '), 1, 500)"/>
    </xsl:element>
</xsl:element>

注:string-join的第二个参数是分隔符,可根据需求调整为空格、换行或其他字符。

相关输入与原代码

输入XML

<Path1>
    <Path2>SENDER 1</Path2>
    <Path2> SENDER xyc</Path2>
    <Path2> SENDER </Path2>
    <Path2> ORG ID:</Path2>
    <Path2> ORG:=</Path2>
    <Path2> ORG </Path2>
    <Path2> BNF </Path2>
    <Path2> BNF NAME:=A</Path2>
    <Path2> BNF ADDRESS</Path2>
    <Path2> BNF FI ID:=</Path2>
    <Path2> BNF FI:=</Path2>
    <Path2> REC FI:=</Path2>
    <Path2> REC ID:=</Path2>
    <Path2> OBI:=</Path2>
</Path1>

原XSLT代码

<xsl:element name="EB">
    <xsl:element name="ID">
        <xsl:value-of select="substring(*:Path1/*:Path2,1,500)"/>
    </xsl:element>
</xsl:element>

内容的提问来源于stack exchange,提问作者Ankit Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:59:52