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

为XML中_id与_ref字段追加后缀的XSLT问题求助

解决XML中批量给特定节点值追加固定后缀的XSLT问题

你遇到的核心问题是原XSLT错误使用了绝对路径表达式,导致所有匹配节点都取到文档中第一个对应节点的值,而非当前节点自身的文本内容。下面是完整的修正方案:

问题分析

原代码里的<xsl:value-of select="concat(//_JsonReader_PS_id, '6869')"/>用了//,这会从根节点开始查找所有匹配节点,然后取第一个节点的值。不管处理的是哪个_JsonReader_PS_id,都会把第一个节点的内容(比如示例里的1)拼接6869,完全不符合需求。我们需要获取当前节点的文本值,只需要用.即可。

修正后的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <!-- 身份转换模板:默认复制所有节点、属性和文本 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 处理_JsonReader_PS_id节点:追加后缀6869 -->
    <xsl:template match="_JsonReader_PS_id">
        <xsl:copy>
            <xsl:value-of select="concat(., '6869')"/>
        </xsl:copy>
    </xsl:template>

    <!-- 处理_JsonReader_PS_ref节点:追加后缀6869 -->
    <xsl:template match="_JsonReader_PS_ref">
        <xsl:copy>
            <xsl:value-of select="concat(., '6869')"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

关键修改点

  • 移除了原代码中无用的<xsl:key name="id" match="ID" use="." />(你的XML里没有ID节点,这个键定义完全无效)
  • 将模板中的//_JsonReader_PS_id和//_JsonReader_PS_ref替换为.,.代表当前上下文节点的文本内容,确保每个节点都用自身值拼接后缀
  • 保留身份转换模板,保证XML的其他结构(包括<?xml-multiple Children?>处理指令、Guid节点等)完全不变

效果验证

用这个修正后的XSLT处理你的示例输入XML,会生成你期望的输出:所有_JsonReader_PS_id和_JsonReader_PS_ref的文本值都正确追加了6869,其余节点和结构保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:52:39