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

XSLT调用fn:substring-after()报多序列错误如何解决

问题原因

你当前的XSLT报错是因为substring-after()函数的第一个参数返回了两个节点的内容,该函数一次只能处理单个输入值。
报错的根源是匹配节点的模板中XPath路径写得不对:你用../../cc1:Seg/cc1:Amt/cc1:Value/cc1:Value1的路径,是从的祖父节点(即节点)开始匹配所有下的,自然会返回所有Seg对应的两个Value1值,触发报错。

修正方案

你只需要把路径改为当前节点所属的同下的即可,正确路径为../cc1:Amt/cc1:Value/cc1:Value1(和是同一下的同级节点,向上找一级到后再定位,只会返回当前Seg对应的单个值)。

修正后的完整XSLT代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:cc1="urn:test1"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="cc1" version="2.0">
    
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <!-- 全局复制所有节点和属性 -->
    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="/cc1:Document/cc1:File/cc1:Detail/cc1:Seg/cc1:Agt">
        <xsl:element namespace="urn:test1" name="{local-name()}">
            <xsl:value-of select="substring-after(../cc1:Amt/cc1:Value/cc1:Value1,'File: ')"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

运行上述代码即可得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:30:04