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

XSLT拆分节点、跳过前两项并按key分组的实现咨询

实现方案(基于XSLT 2.0及以上版本)

完整代码示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>

    <!-- 此处根节点匹配规则可根据你的实际源XML根节点名称调整 -->
    <xsl:template match="/root">
        <!-- 第一步:转换item结构、跳过前2个item -->
        <xsl:variable name="processedItems">
            <xsl:for-each select="item[position() > 2]">
                <xsl:variable name="nameParts" select="tokenize(name, '-')"/>
                <item>
                    <key><xsl:value-of select="$nameParts[1]"/></key>
                    <control><xsl:value-of select="$nameParts[2]"/></control>
                    <!-- 两种取值方式二选一即可 -->
                    <!-- 方式1:直接从当前源item读取value -->
                    <value><xsl:value-of select="value"/></value>
                    <!-- 方式2:使用你已定义的$data变量取值 -->
                    <!-- <value><xsl:value-of select="$data/*[name() = current()/name]"/></value> -->
                </item>
            </xsl:for-each>
        </xsl:variable>

        <!-- 第二步:按key字段分组处理 -->
        <root>
            <xsl:for-each-group select="$processedItems/item" group-by="key">
                <!-- 此处填写分组后的自定义处理逻辑,以下为示例代码:输出分组包裹结构 -->
                <group key="{current-grouping-key()}">
                    <xsl:copy-of select="current-group()"/>
                </group>
            </xsl:for-each-group>
        </root>
    </xsl:template>
</xsl:stylesheet>

关键逻辑说明

  • 跳过前两个item:通过item[position() > 2]筛选,XPath的position()默认从1开始计数,完全匹配需求
  • 拆分name字段:使用tokenize(name, '-')函数按横杠拆分name值,返回的序列第一个元素为key,第二个为control
  • 取值兼容:你预先定义的$data变量可以正常使用,替换value部分的取值逻辑即可,代码中已给出注释示例
  • 分组逻辑:先将所有转换完成的item存入临时变量$processedItems,再对该变量内的item执行group-by="key"分组,current-group()可获取当前分组下的所有item,current-grouping-key()可获取当前分组的key值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:39:02