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

如何将指定XML文件按顺序解析为Item结构数组?

解决XML转指定JSON结构的问题

嘿,这个需求很明确,就是要把嵌套的XML转成每个Item包含prop属性和按顺序排列的key列表的JSON数组对吧?我用Python给你实现,代码简单易懂,还能完美处理多层嵌套的A/B/C标签。

首先得提一句:你的原XML标签没有闭合,解析时会报错,所以我先补全了闭合标签(实际处理本地文件的话,只要文件格式合法就没问题)。下面是完整的实现代码:

import xml.etree.ElementTree as ET
import json

# 替换成你的XML内容,或者后续改成读取本地文件
xml_content = '''
<Root>
    <Item prop="foo"> 
        <A key="1"> 
            <B key="2"> 
                <A key="3"> 
                    <C key="4"> 
                        <A key="5"> 
                            <A key="6"> 
                            </A>
                        </A>
                    </C>
                </A>
            </B>
        </A>
    </Item>
    <Item prop="bar">
        <B key="7">
            <C key="8">
            </C>
        </B>
    </Item>
</Root>
'''

# 解析XML内容
root = ET.fromstring(xml_content)
result = []

# 遍历每个<Item>节点
for item_node in root.findall('Item'):
    item_info = {
        "prop": item_node.get('prop'),
        "list": []
    }
    
    # 递归遍历所有子节点,收集A/B/C的key属性
    def collect_keys(node):
        # 检查当前节点是否是目标标签
        if node.tag in ('A', 'B', 'C'):
            key_val = node.get('key')
            if key_val:
                item_info['list'].append({"key": key_val})
        # 继续遍历子节点,保证顺序和XML里的出现顺序一致
        for child in node:
            collect_keys(child)
    
    # 从Item的直接子节点开始递归遍历
    for child in item_node:
        collect_keys(child)
    
    result.append(item_info)

# 输出格式化后的JSON结果
print(json.dumps(result, indent=2))

代码说明:

  1. XML解析:用Python内置的xml.etree.ElementTree模块,不需要额外安装依赖,轻量高效。
  2. 递归收集key:通过递归函数collect_keys深度优先遍历所有子节点,不管嵌套多少层,只要是A/B/C标签就提取key属性,并且严格按照XML里的顺序添加到list数组中。
  3. 生成JSON:最后把整理好的列表转成带缩进的JSON字符串,完全匹配你想要的结构。

如果你的XML是保存在本地文件里的,只需要把ET.fromstring(xml_content)改成ET.parse('你的文件名.xml').getroot()即可。

运行这段代码后,输出结果如下:

[
  {
    "prop": "foo",
    "list": [
      {
        "key": "1"
      },
      {
        "key": "2"
      },
      {
        "key": "3"
      },
      {
        "key": "4"
      },
      {
        "key": "5"
      },
      {
        "key": "6"
      }
    ]
  },
  {
    "prop": "bar",
    "list": [
      {
        "key": "7"
      },
      {
        "key": "8"
      }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:24:36