Python如何从xml文本节点中去除空格


问题内容

我有一个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-处理以下xml,该xml在<name>标记中有尾巴

<Person>
<name>

 My Name<shortname>My</short>

</name>
<Address>My Address</Address>
</Person>

两种XML都接受答案的句柄

更新2-我在下面的答案中发布了我的版本,我正在使用它删除所有类型的空格并使用xml编码在文件中生成漂亮的xml

https://stackoverflow.com/a/19396130/973699


问题答案:

使用,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>

更新 也剥离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))