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

使用ElementTree迭代字典追加XML元素时如何实现换行显示

解决XML追加元素后换行排版问题

方法1:用Python 3.9+自带的ElementTree indent方法

Python 3.9及以上版本的xml.etree.ElementTree新增了indent()方法,专门用来给XML添加缩进和换行,直接在写入文件前调用即可:

import xml.etree.ElementTree as ET

myDict = [{"name": "dan", "age": "25", "subject":"maths"},
          {"name": "susan", "age": "27", "subject":"english"},
          {"name": "leo", "age": "24", "subject":"psychology"}]

tree = ET.parse('<path to existing .xml>')
root = tree.getroot()

for item in myDict:
    root.append(ET.Element("student", attrib=item))

# 给XML树添加缩进和换行
ET.indent(root, space="  ", level=0)
tree.write('<path to .xml>', encoding='utf-8', xml_declaration=True)
  • space参数指定缩进用的字符(比如两个空格)
  • level控制起始缩进级别

方法2:正确使用lxml实现格式化

你之前用lxml没生效,大概率是没有用lxml的完整流程操作,比如混用了标准库的ElementTree和lxml。改用lxml的API重新实现:

from lxml import etree

myDict = [{"name": "dan", "age": "25", "subject":"maths"},
          {"name": "susan", "age": "27", "subject":"english"},
          {"name": "leo", "age": "24", "subject":"psychology"}]

# 用lxml的parser读取现有XML,保留原有结构
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse('<path to existing .xml>', parser)
root = tree.getroot()

for item in myDict:
    # 用lxml创建元素
    student = etree.Element("student", attrib=item)
    root.append(student)

# 写入时开启pretty_print
tree.write('<path to .xml>', encoding='utf-8', xml_declaration=True, pretty_print=True)
  • remove_blank_text=True是关键,它会清理XML中的空白文本节点,让pretty_print能正确生效
  • 必须全程用lxml的API(解析、创建元素),不能和标准库ET混用

方法3:兼容低版本Python的手动换行(Python<3.9)

如果你的Python版本低于3.9,没法用ET.indent(),可以手动在每个新元素前后添加换行文本节点:

import xml.etree.ElementTree as ET

myDict = [{"name": "dan", "age": "25", "subject":"maths"},
          {"name": "susan", "age": "27", "subject":"english"},
          {"name": "leo", "age": "24", "subject":"psychology"}]

tree = ET.parse('<path to existing .xml>')
root = tree.getroot()

# 先给root末尾加一个换行(如果原XML末尾没有的话)
root.append(ET.Text('\n  '))

for idx, item in enumerate(myDict):
    student = ET.Element("student", attrib=item)
    root.append(student)
    # 最后一个元素后不加多余换行
    if idx != len(myDict)-1:
        root.append(ET.Text('\n  '))

# 写入时指定编码,避免乱码
tree.write('<path to .xml>', encoding='utf-8', xml_declaration=True)

这种方法需要手动控制缩进的空格数,适合低版本环境临时用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:46:40