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

求实现父子关系的XSLT 1.0代码(附发票XML输入示例)

没问题,我来帮你搞定这个XSLT 1.0的需求!从你给出的输入XML来看,应该是要对相同INVOICE_ID的发票行进行分组处理对吧?我默认你想要的是把同一个发票ID下的所有行号整合到一起输出,下面是实现这个需求的XSLT 1.0代码,用的是XSLT 1.0里常用的Muenchian分组方法:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 定义分组键:以INVOICE_ID的值作为分组依据 -->
    <xsl:key name="invoice-by-id" match="invoice" use="INVOICE_ID"/>

    <!-- 设置输出格式为缩进的XML -->
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/invoices">
        <invoice_groups>
            <!-- 遍历每个分组的首个invoice节点,实现去重分组 -->
            <xsl:for-each select="invoice[generate-id() = generate-id(key('invoice-by-id', INVOICE_ID)[1])]">
                <invoice_group>
                    <!-- 复制当前分组的发票ID -->
                    <xsl:copy-of select="INVOICE_ID"/>
                    <!-- 汇总当前分组下的所有行号 -->
                    <LINE_NUMBERS>
                        <xsl:for-each select="key('invoice-by-id', INVOICE_ID)">
                            <xsl:copy-of select="LINE_NUMBER"/>
                        </xsl:for-each>
                    </LINE_NUMBERS>
                </invoice_group>
            </xsl:for-each>
        </invoice_groups>
    </xsl:template>
</xsl:stylesheet>

代码说明:

  • <xsl:key>:定义分组规则,把所有invoice节点按照INVOICE_ID的值归类到不同分组里;
  • generate-id()判断:通过对比节点的生成ID,确保每个发票ID只被处理一次,避免重复输出分组;
  • 分组内遍历:通过key()函数取出当前ID对应的所有发票行,把行号统一汇总到LINE_NUMBERS节点下。

如果你的预期输出不是这种分组整合的形式(比如只是调整节点结构、输出文本格式等),可以告诉我具体的输出样式,我再帮你调整代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:31:25