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
有了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)
| 归档时间: |
|
| 查看次数: |
9124 次 |
| 最近记录: |