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

基于条件的XSLT 2 XML结构修改需求咨询

XSLT2实现按D_350值匹配重组G_HL节点顺序

需求说明

源XML里有两类G_HL节点:

  • 一类是S_HL/D_735='T'的节点,靠S_PO4/D_350作为匹配标识
  • 另一类是S_HL/D_735='I'的节点,靠S_LIN/D_350作为匹配标识

需要把每个D_735='I'的节点,紧跟在D_350值完全匹配的D_735='T'节点后面,输出重组后的XML结构。

解决方案代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.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>

    <!-- 处理根节点,按D_350分组重组G_HL -->
    <xsl:template match="/">
        <xsl:copy>
            <!-- 按D_350值分组:自动识别T/I节点的D_350字段 -->
            <xsl:for-each-group select="*/G_HL" group-by="(S_PO4/D_350, S_LIN/D_350)[1]">
                <!-- 先输出当前组内的T类型节点 -->
                <xsl:apply-templates select="current-group()[S_HL/D_735='T']"/>
                <!-- 再输出当前组内对应的I类型节点 -->
                <xsl:apply-templates select="current-group()[S_HL/D_735='I']"/>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

代码逻辑解释

  1. 基础复制模板:不用手动复制每个节点的结构,自动保留所有原始内容和属性。
  2. 分组重组逻辑:
    • 用xsl:for-each-group按D_350值分组,不管是T节点的S_PO4/D_350还是I节点的S_LIN/D_350,自动取存在的那个值作为分组键。
    • 每组内先输出T节点,再输出对应的I节点,直接实现“T紧跟对应I”的顺序要求。

源XML示例

<root>
    <G_HL>
        <S_HL>
            <D_735>T</D_735>
        </S_HL>
        <S_PO4>
            <D_65>0.000</D_65>
            <D_350>000010</D_350>
        </S_PO4>
        <S_MAN>
            <D_88>GM</D_88>
        </S_MAN>
    </G_HL>
    <G_HL>
        <S_HL>
            <D_735>T</D_735>
        </S_HL>
        <S_PO4>
            <D_65>0.000</D_65>
            <D_350>000020</D_350>
        </S_PO4>
        <S_MAN>
            <D_88>GM</D_88>
        </S_MAN>
    </G_HL>
    <G_HL>
        <S_HL>
            <D_735>I</D_735>
        </S_HL>
        <S_LIN>
            <D_350>000010</D_350>
            <D_235>BP</D_235>
        </S_LIN>
        <S_SN1>
            <D_355>EA</D_355>
        </S_SN1>
    </G_HL>
    <G_HL>
        <S_HL>
            <D_735>I</D_735>
        </S_HL>
        <S_LIN>
            <D_350>000020</D_350>
            <D_235>BP</D_235>
        </S_LIN>
        <S_SN1>
            <D_355>EA</D_355>
        </S_SN1>
    </G_HL>
</root>

期望输出XML

<root>
    <G_HL>
        <S_HL>
            <D_735>T</D_735>
        </S_HL>
        <S_PO4>
            <D_65>0.000</D_65>
            <D_350>000010</D_350>
        </S_PO4>
        <S_MAN>
            <D_88>GM</D_88>
        </S_MAN>
    </G_HL>
    <G_HL>
        <S_HL>
            <D_735>I</D_735>
        </S_HL>
        <S_LIN>
            <D_350>000010</D_350>
            <D_235>BP</D_235>
        </S_LIN>
        <S_SN1>
            <D_355>EA</D_355>
        </S_SN1>
    </G_HL>
    <G_HL>
        <S_HL>
            <D_735>T</D_735>
        </S_HL>
        <S_PO4>
            <D_65>0.000</D_65>
            <D_350>000020</D_350>
        </S_PO4>
        <S_MAN>
            <D_88>GM</D_88>
        </S_MAN>
    </G_HL>
    <G_HL>
        <S_HL>
            <D_735>I</D_735>
        </S_HL>
        <S_LIN>
            <D_350>000020</D_350>
            <D_235>BP</D_235>
        </S_LIN>
        <S_SN1>
            <D_355>EA</D_355>
        </S_SN1>
    </G_HL>
</root>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:12:33