是否存在更简便的XML文件转嵌套数组的解析方法?
解析XML为嵌套数组的简便方法
当然有啦!用Python的标准库xml.etree.ElementTree就能轻松实现,不需要额外安装第三方依赖,非常简便。针对你给出的XML示例,我写了个具体的实现方案:
示例XML
<srcset setid="newstest2015" srclang="any"> <doc sysid="ref" docid="1012-bbc" genre="news" origlang="en"> <p> <seg id="1">印度与日本首相在东京会晤</seg> <seg id="2">印度新任总理纳伦德拉·莫迪正在东京与日本首相安倍晋三会面,讨论经济与安全关系,这是他在5月大选获胜后的首次重大外事访问。</seg> <seg id="3">莫迪先生正在进行一场五……</seg> </p> </doc> </srcset>
实现代码
import xml.etree.ElementTree as ET from pprint import pprint def parse_xml_to_nested_array(element): # 提取当前节点的所有属性,转为字典 node_attrs = dict(element.attrib) # 存储子内容(文本或子节点的解析结果) children_content = [] # 处理节点的文本内容(跳过空白文本) if element.text and element.text.strip(): children_content.append(element.text.strip()) # 递归处理每个子节点 for child in element: children_content.append(parse_xml_to_nested_array(child)) # 返回当前节点的嵌套数组结构:[属性字典, 子内容数组] return [node_attrs, children_content] # 解析示例XML xml_str = '''<srcset setid="newstest2015" srclang="any"> <doc sysid="ref" docid="1012-bbc" genre="news" origlang="en"> <p> <seg id="1">印度与日本首相在东京会晤</seg> <seg id="2">印度新任总理纳伦德拉·莫迪正在东京与日本首相安倍晋三会面,讨论经济与安全关系,这是他在5月大选获胜后的首次重大外事访问。</seg> <seg id="3">莫迪先生正在进行一场五……</seg> </p> </doc> </srcset>''' root_element = ET.fromstring(xml_str) result_array = parse_xml_to_nested_array(root_element) # 打印美化后的结果 pprint(result_array)
输出结果说明
运行代码后,你会得到这样的嵌套数组结构(简化展示核心部分):
[ {'setid': 'newstest2015', 'srclang': 'any'}, [ [ {'docid': '1012-bbc', 'genre': 'news', 'origlang': 'en', 'sysid': 'ref'}, [ [ {}, [ [{'id': '1'}, '印度与日本首相在东京会晤'], [{'id': '2'}, '印度新任总理纳伦德拉·莫迪正在东京与日本首相安倍晋三会面,讨论经济与安全关系,这是他在5月大选获胜后的首次重大外事访问。'], [{'id': '3'}, '莫迪先生正在进行一场五……'] ] ] ] ] ] ]
每个XML节点都被转换成[属性字典, 子内容数组]的形式:
- 第一个元素是节点的所有属性组成的字典(如果没有属性则为空字典)
- 第二个元素是数组,包含节点的文本内容和所有子节点的解析结果(同样是嵌套数组)
如果你的XML有命名空间或者更复杂的结构,也可以用lxml库替代(API和ElementTree几乎兼容),只需要把导入语句改成from lxml import etree as ET即可,它支持更多高级特性比如XPath查询。
内容的提问来源于stack exchange,提问作者alvas
相关产品推荐
相关产品推荐

