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

XSLT 1.0节点值条件替换需求求助(附XML示例)

XSLT 1.0 节点值替换解决方案

针对你需要的节点值替换逻辑,我们可以基于XSLT的身份转换模式来实现——先保留XML的整体结构,再对需要修改的节点单独处理,这样其他节点会自动原样保留。

以下是完整的XSLT 1.0代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 身份转换模板:默认复制所有节点、属性和文本 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 处理BESKZ节点的替换逻辑 -->
    <xsl:template match="BESKZ">
        <xsl:copy>
            <xsl:choose>
                <xsl:when test="text()='X'">NS_CFS</xsl:when>
                <xsl:when test="text()='E'">INV_CFS</xsl:when>
                <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
            </xsl:choose>
        </xsl:copy>
    </xsl:template>

    <!-- 处理NAME节点的替换逻辑 -->
    <xsl:template match="NAME[normalize-space()!='']">
        <xsl:copy>SERIAL</xsl:copy>
    </xsl:template>
</xsl:stylesheet>

逻辑说明:

  • 身份转换模板:这是XSLT的基础模板,会原样复制所有未被专门模板匹配的节点、属性和文本,保证XML结构不变,像NUM1、DOC的属性这类节点会自动保留。
  • BESKZ节点处理:
    • 匹配所有BESKZ节点,先复制节点本身
    • 用<xsl:choose>判断节点文本值:等于X时输出NS_CFS,等于E时输出INV_CFS,其他情况输出原节点值
  • NAME节点处理:
    • 只匹配非空的NAME节点(用normalize-space()去掉前后空格后判断,避免纯空格的情况被误判)
    • 直接复制节点并替换内容为SERIAL;如果NAME为空,则走身份模板保留原内容

测试验证

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<DOC BEGIN="1">
    <BESKZ>X</BESKZ>
    <NUM1>1010</NUM1>
    <NAME>ABC</NAME>
</DOC>

转换后输出XML:

<?xml version="1.0" encoding="UTF-8"?>
<DOC BEGIN="1">
    <BESKZ>NS_CFS</BESKZ>
    <NUM1>1010</NUM1>
    <NAME>SERIAL</NAME>
</DOC>

完全符合你期望的输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:23