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

Python中使用lxml写XML如何同时实现空标签显式闭合与换行美化

问题原因

lxml的method="html"输出模式原生不支持pretty_print参数,两个参数同时启用时格式化会失效,属于库的固有特性。

方案1:基于lxml实现(推荐,无需换库)

如果你的lxml版本≥4.5.0,可以用内置的etree.indent()方法提前给元素树插入缩进和换行,再用html模式输出即可同时满足两个需求:

from lxml import etree
from lxml.etree import Element

if __name__ == '__main__':
    root = Element("root")
    empty_element = Element("empty")
    root.append(empty_element)
    # 提前完成缩进排版,space参数可自定义缩进空格数
    etree.indent(root, space="  ")
    # 仅启用html模式即可,无需加pretty_print参数
    etree.ElementTree(root).write("output.xml", method="html", encoding="utf-8")

输出结果如下,完全符合要求:

<root>
  <empty></empty>
</root>
方案2:使用Python标准库实现

如果不想依赖lxml,可以用Python自带的xml模块组合实现:

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

def format_xml(elem, indent="  "):
    raw_str = ET.tostring(elem, encoding="utf-8")
    parse_dom = minidom.parseString(raw_str)
    return parse_dom.toprettyxml(indent=indent, encoding="utf-8").decode("utf-8")

if __name__ == '__main__':
    root = ET.Element("root")
    ET.SubElement(root, "empty")
    xml_content = format_xml(root)
    with open("output.xml", "w", encoding="utf-8") as f:
        f.write(xml_content)

输出结果同样支持显式空标签和自动缩进排版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:45:03