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

标签 python xml python-2.7 xml-parsing lxml

我有一个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

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>

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/

相关文章:

xml - 跨多个 XML 文件的 XPath 查询?

c# - 解析 EntityName 时出错。 Line1,位置 844

python - 行之间的条件数学运算

django - 导入错误: No module named south

python - 如何检测时间序列数据是否几乎没有变化?

python - 在 scikit-learn 中运行 Randomforest 的 MemoryError

java - 检查 Java 对象是否已被修改

python - 反转 Python 字符串的切片

python - 如何在 Python 中获取父目录的名称?

python - 如何在python中一次性找到链表的中间元素?