python - 用 python 处理 xml

标签 python xml

我需要删除 xml 标签之间的空格,例如如果原始 xml 如下所示:

<node1>
    <node2>
        <node3>foo</node3>
    </node2>
</node1>

我希望最终结果压缩为单行:

<node1><node2><node3>foo</node3></node2></node1>

请注意,我无法控制 xml 结构,因此该解决方案应该足够通用,能够处理任何有效的 xml。此外,xml 可能包含 CDATA block ,我需要将其从这个处理中排除并保持原样。

到目前为止我有几个想法:(1)将 xml 解析为文本并查找标记 < 和 > 的开始和结束(2)另一种方法是加载 xml 文档并逐个节点打印通过连接标签生成文档。

我认为这两种方法都可以,但我不想在这里重新发明轮子,所以可能有一个 python 库已经做了类似的事情?如果没有,那么在推出我自己的 cruncher 时需要注意的任何问题/陷阱?有什么建议吗?

编辑 谢谢大家的回答/建议,Triptych 和 Van Gale 的解决方案都对我有用,并且完全按照我的意愿行事。希望我能接受这两个答案。

最佳答案

这很容易用 lxml 处理(注意:这个特殊功能不在 ElementTree 中):

from lxml import etree

parser = etree.XMLParser(remove_blank_text=True)

foo = """<node1>
    <node2>
        <node3>foo  </node3>
    </node2>
</node1>"""

bar = etree.XML(foo, parser)
print etree.tostring(bar,pretty_print=False,with_tail=True)

结果:

<node1><node2><node3>foo  </node3></node2></node1>

编辑:Triptych 的回答让我想起了 CDATA 要求,因此创建解析器对象的行实际上应该如下所示:

parser = etree.XMLParser(remove_blank_text=True, strip_cdata=False)

关于python - 用 python 处理 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667359/

相关文章:

android - 如何在android中创建侧边栏

java - React JS中如何将JSON数据转换为XML格式数据并下载文件

python - 带有 XMLField 的 Django 模型

python - Django:url 调度程序

python - 使用 BeautifulSoup 获取以 ":"分隔的文本

XCCDF 上的 C# Linq-to-XML

python - 从多个文件读取行

来自 mysqldb 的 Python 列表格式

java - Android Studio 入门教程问题

php - 我的应用程序正在向服务器发送 XML 文件 : need some guidance on writing a PHP script to parse the XML file