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

如何使用Python 3.9将指定RAML格式XML转换为CSV?

Python 3.9 实现RAML格式XML转CSV

实现思路

针对你提供的RAML XML结构,核心是提取managedObject节点的属性及其子节点<p>的键值对,将它们作为CSV的列,每个managedObject对应CSV的一行数据。我们使用Python标准库xml.etree.ElementTree解析XML,csv模块处理CSV写入,无需额外安装依赖。

代码实现

import xml.etree.ElementTree as ET
import csv

# 1. 解析XML文件(如果是字符串可以用ET.fromstring()替代)
tree = ET.parse("input.xml")
root = tree.getroot()

# 处理XML命名空间
ns = {"raml": "raml20.xsd"}

# 2. 收集所有需要的列名:managedObject属性 + 所有<p>的name属性
fieldnames = set()
# 遍历所有managedObject收集属性键
for mo in root.findall(".//raml:managedObject", ns):
    fieldnames.update(mo.attrib.keys())
    # 收集<p>的name属性
    for p in mo.findall("raml:p", ns):
        fieldnames.add(p.attrib["name"])

# 转成有序列表(可根据需求调整列顺序)
fieldnames = sorted(fieldnames)

# 3. 提取每个managedObject的数据
rows = []
for mo in root.findall(".//raml:managedObject", ns):
    row_data = mo.attrib.copy()
    # 填充<p>的键值对
    for p in mo.findall("raml:p", ns):
        key = p.attrib["name"]
        row_data[key] = p.text.strip() if p.text else ""
    rows.append(row_data)

# 4. 写入CSV文件
with open("output.csv", "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(rows)

代码说明

  • 命名空间处理:由于XML根节点带有xmlns="raml20.xsd",解析时必须指定命名空间前缀,否则无法正确定位节点。
  • 列名收集:通过遍历所有managedObject及其子节点,确保不会遗漏任何可能的列,适合处理包含多个不同结构managedObject的XML文件。
  • 数据填充:先复制managedObject的属性字典,再补充<p>标签的键值对,缺失的列会自动填充为空字符串,保证CSV格式统一。
  • 编码与换行:使用utf-8编码避免中文乱码,newline=""确保跨平台换行符一致。

输出示例

根据你提供的XML,生成的CSV内容如下:

a1TimeToTriggerDeactInterMeas,a2RedirectQci1,class,distName,id,mcc,mnc,name,version
320ms,disabled,LNCEL,PLMN-PLMN/MRBTS-10000/LNBTS-100007/LNCEL-10,10000,100,20,Cell01,FLF22R3_2207_10_2207_10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:58:16