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

基于ABLAD/VKORG值变化为E1EDL20添加包装元素的XSLT需求

修正XSLT实现按ABLAD+VKORG分组包装E1EDL20元素

核心思路

要实现ABLAD字段值变化或VKORG值更新时,为E1EDL20生成独立GROUPBY父元素,核心是用Muenchian分组,把ABLAD和VKORG的组合作为分组键——只要其中任意一个字段值变化,分组键就会不同,自然触发新分组。

修正后的XSLT代码

假设你的源XML结构包含多个E1EDL20节点,每个节点下有E1EDL19子节点存储ABLAD和VKORG值,修正后的代码如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <!-- 定义分组键:组合ABLAD和VKORG,确保任一值变化则分组不同 -->
    <xsl:key name="groupKey" match="E1EDL20" use="concat(E1EDL19/ABLAD, '|', E1EDL19/VKORG)"/>

    <xsl:template match="/">
        <ROOT>
            <!-- 遍历每个分组的第一个E1EDL20节点 -->
            <xsl:for-each select="ROOT/E1EDL20[generate-id() = generate-id(key('groupKey', concat(E1EDL19/ABLAD, '|', E1EDL19/VKORG))[1])]">
                <!-- 生成GROUPBY父元素 -->
                <GROUPBY>
                    <!-- 输出当前分组下的所有E1EDL20节点 -->
                    <xsl:copy-of select="key('groupKey', concat(E1EDL19/ABLAD, '|', E1EDL19/VKORG))"/>
                </GROUPBY>
            </xsl:for-each>
        </ROOT>
    </xsl:template>
</xsl:stylesheet>

关键说明

  1. 分组键定义:用concat(E1EDL19/ABLAD, '|', E1EDL19/VKORG)作为分组键,|是分隔符(避免两个字段值拼接后产生歧义,比如ABLAD是"01"、VKORG是"00"和ABLAD是"0"、VKORG是"100"的情况)。
  2. 分组筛选:通过generate-id()判断当前节点是否是对应分组的第一个节点,确保每个分组只生成一个GROUPBY父元素。
  3. 节点复制:用xsl:copy-of把当前分组下所有E1EDL20节点完整复制到GROUPBY内部。

测试验证

如果源XML包含以下节点:

<ROOT>
    <E1EDL20>
        <E1EDL19><ABLAD>20240501</ABLAD><VKORG>0100</VKORG></E1EDL19>
        <!-- 其他子节点 -->
    </E1EDL20>
    <E1EDL20>
        <E1EDL19><ABLAD>20240501</ABLAD><VKORG>0100</VKORG></E1EDL19>
        <!-- 其他子节点 -->
    </E1EDL20>
    <E1EDL20>
        <E1EDL19><ABLAD>20240502</ABLAD><VKORG>0200</VKORG></E1EDL19>
        <!-- 其他子节点 -->
    </E1EDL20>
</ROOT>

输出会生成两个独立的GROUPBY分组:

<ROOT>
    <GROUPBY>
        <E1EDL20>
            <E1EDL19><ABLAD>20240501</ABLAD><VKORG>0100</VKORG></E1EDL19>
            <!-- 其他子节点 -->
        </E1EDL20>
        <E1EDL20>
            <E1EDL19><ABLAD>20240501</ABLAD><VKORG>0100</VKORG></E1EDL19>
            <!-- 其他子节点 -->
        </E1EDL20>
    </GROUPBY>
    <GROUPBY>
        <E1EDL20>
            <E1EDL19><ABLAD>20240502</ABLAD><VKORG>0200</VKORG></E1EDL19>
            <!-- 其他子节点 -->
        </E1EDL20>
    </GROUPBY>
</ROOT>

这样就能确保VKORG=0100和VKORG=0200的E1EDL20被分别包装到独立的GROUPBY中,满足SAP PO的分组需求。

内容的提问来源于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.07 13:15:32