使用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库可以轻松完成这个需求,步骤如下:
- 先安装依赖(如果没装的话):
pip install lxml - 运行下面的脚本即可:
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
相关产品推荐
相关产品推荐

