Python处理XML换行和空白需区分“有意义内容”与“格式化空白”:ElementTree默认保留所有空白,可用strip()清理首尾空白,lxml的remove_blank_text=True可跳过纯空白节点,输出时用minidom或lxml美化缩进。

Python处理XML中的换行和空白字符,核心在于区分「有意义的空白」和「格式化用的空白」——默认情况下,xml.etree.ElementTree(标准库)会保留所有文本内容,包括换行符\n、制表符\t和空格,但不会自动“美化”或“清理”。是否保留、如何清理,取决于你的使用场景。
XML本身不区分“用户数据中的空格”和“编辑器缩进产生的空格”,但人类阅读时习惯用缩进来组织结构。ElementTree把这类缩进也当作普通文本节点(tail 或 text)读入。
<parent>\n <child>...</child></parent>中,会被存为parent.text或child.tail,值可能是'\n '
<desc>第一行\n第二行</desc>,这部分\n属于内容,应保留直接用ET.parse()或ET.fromstring()读取,空白照单全收。你可以遍历后统一清理:
import xml.etree.ElementTree as ET
<p>tree = ET.parse("data.xml")
root = tree.getroot()</p><h1>清理所有text/tail中的首尾空白(含\n\t),但不破坏内部换行</h1><p>for elem in root.iter():
if elem.text is not None:
elem.text = elem.text.strip()
if elem.tail is not None:
elem.tail = elem.tail.strip()
注意:strip()只去首尾,不影响中间的换行;若想彻底删除所有空白字符(不推荐),可用re.sub(r'\s+', '', elem.text),但会误伤真实内容。
立即学习“Python免费学习笔记(深入)”;
xml.etree.ElementTree.XMLParser预设空白处理策略从Python 3.9起,XMLParser支持strip_cdata=False,但真正控制空白的是target参数配合自定义处理器。更实用的是使用remove_whitespace=True(需第三方库)或改用lxml:
minidom(标准库)的normalize() + 手动删空文本节点lxml,它提供remove_blank_text=True选项from lxml import etree
<p>parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("data.xml", parser)</p><h1>自动跳过仅含空白的text/tail节点</h1><p>ElementTree默认输出无缩进。如需生成易读XML,可用xml.dom.minidom或lxml美化:
# 方法1:用minidom美化(适合小文件) rough_string = ET.tostring(root, encoding="unicode") reparsed = minidom.parseString(rough_string) print(reparsed.toprettyxml(indent=" ")) <h1>方法2:lxml自动缩进(推荐)</h1><p>root = etree.fromstring(rough_string) print(etree.tostring(root, pretty_print=True, encoding="unicode"))
注意:toprettyxml()会在每行末加多余换行,可用正则简单清洗;lxml的pretty_print更干净。
基本上就这些。关键不是“删不删换行”,而是明确哪些空白属于格式、哪些属于数据——按需处理,别一刀切。
以上就是Python怎么处理XML中的换行和空白字符的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号