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

如何修改Python代码以生成符合指定格式要求的XML文件

Python调整ElementTree生成XML格式的方案

核心问题

你当前代码将name/id等字段作为节点的子元素生成,而预期格式要求这些字段作为节点属性存在,另外还存在缩进、XML声明缺失编码属性、测试用例节点嵌套错误的问题。

修改后完整代码

import xml.etree.ElementTree as ET
import uuid
from xml.dom import minidom

# 以下变量请保留你原来的赋值逻辑
total_tests = 2048
failed = 0
tcname = ["HomePage", "OtherPage"]
tctotal = [420, 300]
tcpasses = [420, 298]
tcfails = [0, 2]

root = ET.Element("testsuites")
# 直接将所有字段作为testsuite的属性传入,不再创建子元素
doc = ET.SubElement(root, "testsuite", attrib={
    "name": "ABC",
    "id": str(uuid.uuid4()),
    "tests": str(total_tests),
    "failures": str(failed),
    "failed": str(failed),
    "log": ""
})

# 循环创建每个testcase节点,直接传入属性,不创建子元素
for na, tot, pa, fa in zip(tcname, tctotal, tcpasses, tcfails):
    # 此处log内容可根据你的实际需求修改格式
    log_content = f"+ {pa} pass {fa} fail 测试结果\r\n"
    ET.SubElement(doc, "testcase", attrib={
        "name": na,
        "log": log_content
    })

# 调整缩进为2空格,指定编码让XML声明带utf-8
xml_bytes = ET.tostring(root)
xmlstr = minidom.parseString(xml_bytes).toprettyxml(indent="  ", encoding="utf-8").decode("utf-8")

with open("Test.xml", "w", encoding='utf-8') as f:
    f.write(xmlstr)

修改说明

  • 所有原作为子节点生成的元数据改为节点属性,完全匹配预期XML的结构
  • 去掉了提前创建的统一testcase节点,循环内为每个测试用例单独创建testcase节点,避免所有用例嵌套在同一个节点下的错误
  • 缩进值从3空格调整为2空格,和预期格式对齐
  • 生成格式化XML时指定encoding="utf-8",XML声明会自动带上编码属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:00:00