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
相关产品推荐
相关产品推荐

