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

XSL过滤IDOC XML:保留含PARTNER_Q='AG'的E1EDL20节点

过滤SHPMNT05 IDOC XML的XSLT方案

以下是实现需求的XSLT代码,核心是通过精准的节点筛选保留符合条件的E1EDL20节点,同时保留原XML的其他结构:

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

    <!-- 仅保留包含E1ADRM1且PARTNER_Q='AG'的E1EDL20节点 -->
    <xsl:template match="E1EDL20[not(E1ADRM1/PARTNER_Q = 'AG')]"/>
</xsl:stylesheet>

关键说明:

  • 身份转换模板确保原XML中所有未被过滤的节点(包括IDOC头部、其他非E1EDL20节点等)都被完整复制。
  • 第二个模板通过match="E1EDL20[not(E1ADRM1/PARTNER_Q = 'AG')]"匹配不满足条件的E1EDL20节点,空模板意味着这些节点会被直接丢弃,只有符合条件的E1EDL20会被身份模板保留。
  • 如果E1ADRM1是E1EDL20的深层子节点(而非直接子元素),只需调整路径即可,比如E1ADRM1在E1EDL20/E1ADRMT/E1ADRM1,则把条件改为[E1ADRMT/E1ADRM1/PARTNER_Q = 'AG']。

示例验证:

假设原XML片段如下:

<IDOC BEGIN="1">
    <E1EDL20>
        <E1ADRM1>
            <PARTNER_Q>AG</PARTNER_Q>
            <NAME>客户A</NAME>
        </E1ADRM1>
        <DELIVERY_NUM>12345</DELIVERY_NUM>
    </E1EDL20>
    <E1EDL20>
        <E1ADRM1>
            <PARTNER_Q>WE</PARTNER_Q>
            <NAME>仓库B</NAME>
        </E1ADRM1>
        <DELIVERY_NUM>67890</DELIVERY_NUM>
    </E1EDL20>
</IDOC>

转换后会只保留第一个E1EDL20节点:

<IDOC BEGIN="1">
    <E1EDL20>
        <E1ADRM1>
            <PARTNER_Q>AG</PARTNER_Q>
            <NAME>客户A</NAME>
        </E1ADRM1>
        <DELIVERY_NUM>12345</DELIVERY_NUM>
    </E1EDL20>
</IDOC>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:46:02