如何从XML中按Kod='N'条件提取去重的doc_num与X属性值
实现思路
- 第一步解析XML结构,提取根节点
的 doc_num属性值 - 第二步通过XPath表达式过滤出所有
Kod="N"的节点 - 第三步收集所有符合条件节点的X属性值后做去重处理
- 第四步按要求的格式对齐输出结果
Python实现代码(依赖lxml库)
from lxml import etree # 解析XML内容 xml_content = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?> <main doc_num="99"> <item name="A"> <Dok Kod="N" X="1" Id="5"/> <Dok Kod="N" X="4" Id="5"/> </item> <item name="B"> <Dok Kod="N" X="1" Id="2"/> <Dok Kod="N" X="4" Id="6"/> <Dok Kod="N" X="5" Id="8"/> <Dok Kod="Z" X="4553" Id="8"/> </item> </main>''' root = etree.fromstring(xml_content.encode('utf-8')) # 获取doc_num属性值 doc_num = root.get('doc_num') # 筛选所有Kod属性为N的Dok节点 dok_nodes = root.xpath('//Dok[@Kod="N"]') # 收集X值并去重、排序 x_values = sorted(set(node.get('X') for node in dok_nodes)) # 按要求格式输出 print(f"{'doc_num':<12}X") for x in x_values: print(f"{doc_num:<12}{x}")
额外说明
如果你的运行环境支持XPath 2.0,可以直接用XPath表达式 distinct-values(//Dok[@Kod="N"]/@X) 一步获取所有去重后的X属性值,再搭配/main/@doc_num拿到文档编号即可快速拼接结果。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

