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

Dev*_*evC 4 python xml lxml xml-parsing python-2.7

我有一个xml文件如下

<Person>
<name>

 My Name

</name>
<Address>My Address</Address>
</Person>
Run Code Online (Sandbox Code Playgroud)

标签有额外的新行,是否有任何快速的 Pythonic 方法来修剪它并生成一个新的 xml。

我发现了这个,但它只修剪标签之间的标签而不是值https://skyl.org/log/post/skyl/2010/04/remove-in重要-whitespace-from-xml-string-with-python /

更新 1 - 处理以下在<name>标签中有尾空格的 xml

<Person>
<name>

 My Name<shortname>My</short>

</name>
<Address>My Address</Address>
</Person>
Run Code Online (Sandbox Code Playgroud)

接受的答案句柄高于这两种 xml

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

/sf/answers/1357729131/

Bir*_*rei 5

有了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))
Run Code Online (Sandbox Code Playgroud)

它产生:

<Person><name>My Name</name>
<Address>My Address</Address>
</Person>
Run Code Online (Sandbox Code Playgroud)

更新以去除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))
Run Code Online (Sandbox Code Playgroud)