生成复杂嵌套xml的关键是将结构视为“树形对象图”,支持边建边挂载或先建后拼接;subelement递进创建适合浅层结构,字典+递归适合深层动态场景,并可处理命名空间、注释等扩展需求。
理解ElementTree的嵌套逻辑
生成复杂嵌套XML的关键不是层层调用SubElement,而是把XML结构看作“树形对象图”:每个元素是可持有子元素的容器,子元素可继续添加子元素。ElementTree不强制一次性构建,支持边建边挂载,也支持先建好再拼接。
用SubElement递进创建多层结构
这是最直观的方式,适合结构明确、层级较浅(如4层以内)的场景。每一步都返回新创建的子元素,可立即在其上继续添加:
- 用
ET.Element("root")创建根节点 - 对每个子节点,调用
ET.SubElement(父节点, "标签名", attrib={...}) - 返回值就是该子节点,可链式调用或赋值后复用
- 文本内容通过
.text = "值"设置,尾部空白用.tail(一般不用)
例如生成带属性和文本的三层结构:
import xml.etree.ElementTree as ET
<p>root = ET.Element("company", name="TechCorp")
dept = ET.SubElement(root, "department", id="d1")
emp = ET.SubElement(dept, "employee", status="active")
emp.text = "Alice"
ET.SubElement(emp, "role").text = "Engineer"
ET.SubElement(emp, "salary").text = "95000"</p><h1>输出美化后的XML</h1><p>ET.indent(root) # Python 3.9+ 支持,需手动启用缩进
print(ET.tostring(root, encoding="unicode"))</p>
用字典+递归批量生成深层嵌套
当XML结构来自配置、数据库或API响应时,用嵌套字典描述更清晰。写一个递归函数,把字典自动转为ElementTree节点: