Python中如何遍历字典为XML元素批量添加多组属性键值对
你原来的代码逻辑问题在于:循环中每次调用ET.SubElement都会生成一个全新的<field1>元素,所以最终会得到3个各自仅带1个属性的field1节点,而非你想要的单个携带所有字典键值对作为属性的field1节点。
推荐实现方式(字典解包传参)
创建元素时直接用**语法解包字典,一次性传入所有属性,代码最简洁:
import xml.etree.ElementTree as ET d = { "a": "1", "b": "2", "c": "what" } root = ET.Element("root") child = ET.SubElement(root, "child") # 解包字典作为属性参数 field1 = ET.SubElement(child, "field1", **d) field1.text = "some value1" tree = ET.ElementTree(root) tree.write("logs/filename.xml")
循环添加属性的实现方式
如果需要在添加属性时做额外的逻辑处理(比如属性名/值转换、过滤),可以先创建空元素,再遍历字典逐个添加属性:
import xml.etree.ElementTree as ET d = { "a": "1", "b": "2", "c": "what" } root = ET.Element("root") child = ET.SubElement(root, "child") field1 = ET.SubElement(child, "field1") for k, v in d.items(): # 逐个设置属性 field1.set(k, v) field1.text = "some value1" tree = ET.ElementTree(root) tree.write("logs/filename.xml")
两种方案最终生成的XML内容均符合你的预期:
<root><child><field1 a="1" b="2" c="what">some value1</field1></child></root>
内容的提问来源于stack exchange,提问作者hashy
相关产品推荐
相关产品推荐

