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

使用XSLT对XML相似节点分组:求助解决节点归类难题

嘿,我来帮你搞定这个XML节点分组的问题!我准备了两种常用的解决方案,你可以根据自己的使用场景来选:

方案一:用XSLT实现分组

如果是直接处理XML文件,XSLT是原生适配的工具,非常适合做节点分组。核心思路是先从class属性里提取出你想要的分组关键词(比如从002. AB vs BC中提取AB vs BC),再基于这个关键词完成分组:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 定义分组规则:以class属性中.后面的内容作为分组键 -->
    <xsl:key name="text-by-group" match="text" use="substring-after(@class, '. ')"/>

    <xsl:template match="/name">
        <grouped-results>
            <!-- 遍历所有唯一的分组关键词 -->
            <xsl:for-each-group select="text" group-by="substring-after(@class, '. ')">
                <group name="{current-grouping-key()}">
                    <!-- 输出当前分组下的所有text节点 -->
                    <xsl:copy-of select="current-group()"/>
                </group>
            </xsl:for-each-group>
        </grouped-results>
    </xsl:template>
</xsl:stylesheet>

简单说明:

  • substring-after(@class, '. ') 专门用来分割class属性,精准提取. 后面的分组关键词;
  • <xsl:for-each-group> 会自动把拥有相同关键词的text节点归为一组;
  • 最终输出会把每个分组的节点包裹在<group>标签里,结构清晰一目了然。

方案二:用Python脚本实现分组

如果更习惯用代码处理,Python的lxml库可以轻松完成这个需求,步骤如下:

  1. 先安装依赖(如果没装的话):pip install lxml
  2. 运行下面的脚本即可:
from lxml import etree

# 这里替换成你的实际XML内容
xml_content = '''
<name>
    <text class="002. AB vs BC"> Sample</text>
    <text class="003. DC vs BC"> Sample</text>
    <text class="004. CD vs BC"> Sample</text>
    <text class="005. AB vs BC"> Sample</text>
    <text class="006. AB vs BC"> Sample</text>
    <text class="007. EF vs BC"> Sample</text>
    <text class="008. CD vs BC"> Sample</text>
</name>
'''

# 解析XML内容
root = etree.fromstring(xml_content)

# 初始化字典存储分组结果
grouped_texts = {}

# 遍历所有text节点
for text_node in root.xpath('//text'):
    # 从class属性中提取分组关键词
    class_attr = text_node.get('class')
    group_key = class_attr.split('. ')[1]  # 分割后取第二部分
    
    # 将节点添加到对应分组
    if group_key not in grouped_texts:
        grouped_texts[group_key] = []
    grouped_texts[group_key].append(text_node)

# 输出分组结果(你可以根据需求调整输出格式,比如导出为新XML/JSON)
for group_name, nodes in grouped_texts.items():
    print(f"=== 分组: {group_name} ===")
    for node in nodes:
        print(f"节点内容: {node.text.strip()} | Class属性: {node.get('class')}")

简单说明:

  • 用split('. ')分割class属性,一步拿到你需要的分组关键词;
  • 用字典的键存分组名称,值存对应的节点列表,逻辑清晰;
  • 最后可以按需调整输出格式,比如生成新的XML文件或者导出为JSON格式。

这两种方案都能完美实现你要的分组效果,选哪种就看你更熟悉哪种工具啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:10