如何修改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
相关产品推荐
相关产品推荐

