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

是否存在更简便的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:17:35