我有一个xml文件如下
<Person>
<name>
My Name
</name>
<Address>My Address</Address>
</Person>
标签有额外的新行,是否有任何快速的 Pythonic 方法来修剪它并生成新的 xml。
我找到了这个,但它只修剪标签之间的部分而不是值 https://skyl.org/log/post/skyl/2010/04/remove-insignificant-whitespace-from-xml-string-with-python/
更新 1 - 处理以下在 <name>
中有尾空格的 xml标记
<Person>
<name>
My Name<shortname>My</short>
</name>
<Address>My Address</Address>
</Person>
两种 xml 的接受答案句柄
更新 2 - 我已经在下面的答案中发布了我的版本,我正在使用它来删除所有类型的空格并使用 xml 编码在文件中生成漂亮的 xml
最佳答案
使用 lxml
,您可以遍历所有元素并检查它是否有文本到 strip()
:
from lxml import etree
tree = etree.parse('xmlfile')
root = tree.getroot()
for elem in root.iter('*'):
if elem.text is not None:
elem.text = elem.text.strip()
print(etree.tostring(root))
它产生:
<Person><name>My Name</name>
<Address>My Address</Address>
</Person>
UPDATE 也去除 tail
文本:
from lxml import etree
tree = etree.parse('xmlfile')
root = tree.getroot()
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()
print(etree.tostring(root, encoding="utf-8", xml_declaration=True))
关于Python 如何从 xml 文本节点中去除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19288469/