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

使用标识转换与单匹配语句多谓词实现XML节点静默及元素重映射

XSLT 解决方案

核心思路是基于标识转换,针对目标节点编写定向处理模板:

  • 基础标识转换模板:默认复制所有节点、属性和文本,保证未指定的内容原样输出
  • 专门模板移除<CalculatedField>节点
  • 条件模板处理<CtgyPurp>节点,根据双条件决定修改或移除

以下是完整的XSLT代码:

<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>

    <!-- 完全移除<CalculatedField>节点 -->
    <xsl:template match="CalculatedField"/>

    <!-- 条件处理<CtgyPurp>节点 -->
    <xsl:template match="CtgyPurp">
        <!-- 检查双条件:<Ctry>值为"NL" 且 <CalculatedField>值为"AD_HOC" -->
        <xsl:if test="ancestor::CdtTrfTxInf//Ctry = 'NL' and ancestor::CdtTrfTxInf//CalculatedField = 'AD_HOC'">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:for-each select="node()">
                    <xsl:choose>
                        <xsl:when test="local-name() = 'Cd'">
                            <Cd>SALA</Cd>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:copy-of select="."/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:for-each>
            </xsl:copy>
        </xsl:if>
        <!-- 条件不满足时,不输出<CtgyPurp>节点 -->
    </xsl:template>
</xsl:stylesheet>

代码说明:

  1. 标识转换模板确保除了被专门匹配的节点外,所有内容都原样保留
  2. 匹配<CalculatedField>的模板无输出,直接实现节点移除
  3. 匹配<CtgyPurp>的模板中,通过ancestor::CdtTrfTxInf//路径定位上层的<Ctry>和<CalculatedField>节点(可根据实际XML结构调整路径):
    • 双条件同时满足时,复制<CtgyPurp>并将其下的<Cd>文本替换为"SALA"
    • 条件不满足时,模板无输出,相当于移除<CtgyPurp>节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:35:55