Python解析及写入XML文件时如何保留标签及属性周边原有空格
Python处理XML时保留标签内空格的实现方法
默认的XML解析库(包括Python标准库xml.etree.ElementTree、第三方库lxml)都会默认丢弃无语义空格:包括属性等号前后的空格、标签名与闭合尖括号之间的空格,这就是写入后空格消失的原因。要保留这类空格可以参考以下两种方案:
方案1:使用lxml自定义序列化规则(推荐)
lxml的可配置性更高,通过调整解析和写入参数可以最大程度保留原有格式:
from lxml import etree # 解析时关闭空白自动移除 parser = etree.XMLParser(remove_blank_text=False) tree = etree.parse("input.xml", parser) # 写入时关闭自动格式化,自定义属性输出逻辑 with open("output.xml", "wb") as f: # 禁用格式化输出,保留原始节点的空白结构 f.write(etree.tostring(tree, pretty_print=False, encoding="utf-8"))
如果需要严格固定属性前后的空格格式,可以重写序列化逻辑,自定义属性输出的空格规则即可。
方案2:直接以文本形式处理XML(格式一致性最高)
如果不需要解析XML的节点结构,只需要修改部分节点内容,直接以文本模式读写XML文件即可,完全不会触发解析器的自动格式化:
# 读取原始文件 with open("input.xml", "r", encoding="utf-8") as f: content = f.read() # 按字符串替换修改需要调整的内容,比如修改Amount的值 content = content.replace('<Amount currency = "100" sign = "D" >2000</Amount>', '<Amount currency = "100" sign = "D" >3000</Amount>') # 直接写入 with open("output.xml", "w", encoding="utf-8") as f: f.write(content)
这种方案不会改变原始文件的任何字符,完全保留所有空格、换行等格式。
内容的提问来源于stack exchange,提问作者Krishnakanth kodamalla
相关产品推荐
相关产品推荐

