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

使用XSLT将XML中标识符引用的节点值复制到其他节点的问题求助

问题排查及解决方案

错误原因

  • XPath中变量引用错误:你在选择路径里给$IdObject加了单引号,导致程序将其识别为固定字符串'$IdObject',而非你存储的ID变量值,XPath引用变量无需加引号。
  • 节点名大小写不匹配:原XML中的文件名字段为FileName,你的选择路径写为Filename,XSLT对大小写敏感,无法匹配到对应节点。
  • 输出节点名不匹配:你期望输出的标题节点为<Name>,原代码中仍使用<Title>,需要同步调整。

修正后代码

<xsl:template match="Content">
    <!-- 变量可直接用select赋值,简化写法 -->
    <xsl:variable name="IdObject" select="ObjectReference" />
    <Out>
        <Name>
            <xsl:value-of select="Title"/>
        </Name>
        <FileName>
            <!-- 去掉变量的单引号,修正节点名大小写 -->
            <xsl:value-of select="//Object[@id=$IdObject]/FileName"/>
        </FileName>
    </Out>
</xsl:template>

可选优化

如果处理的XML文件体积较大,全局路径//Object会影响性能,可通过定义key优化查找效率:

<!-- 顶层定义key,放在template外即可 -->
<xsl:key name="objectById" match="Object" use="@id" />

<xsl:template match="Content">
    <xsl:variable name="IdObject" select="ObjectReference" />
    <Out>
        <Name>
            <xsl:value-of select="Title"/>
        </Name>
        <FileName>
            <!-- 用key查找,性能更优 -->
            <xsl:value-of select="key('objectById', $IdObject)/FileName"/>
        </FileName>
    </Out>
</xsl:template>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:05