如何使用python删除xml节点

时间:2015-04-22 06:13:25

标签: python xml

我想从xml文件中删除元素。当我使用ElementTree时,我可以从xml文件中获取所有元素,但是我无法获取xml语句和注释。 所以,如果我使用:

# get xml nodes
tree = ElementTree.pares()
# do filter things ...
# write to files
tree.write(file_path)

我会遗漏所有的陈述和注释。有没有办法从* .xml文件中删除xml元素并保留文件中的注释,语句或任何其他内容?

例如,来源:

<?xml version="1.0" encoding="utf-8"?>
<!-- I am annotation -->
<string name="name">content</string><string left="left">left things</string>

我的目标:

<?xml version="1.0" encoding="utf-8"?>
<!-- I am annotation -->
<string left="left">left things</string>

但是当我使用tree.write(file_path)时,它会错过注释和语句,变为:

<string left="left">left things</string>

2 个答案:

答案 0 :(得分:0)

使用https://docs.python.org/2/library/xml.etree.elementtree.html

import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()

for country in root.findall('//string[@name='left']'):
    root.remove(country)        

tree.write('output_data.xml')

答案 1 :(得分:0)

可以使用lxml提供remove_comments=False选项来保留XML注释:

from lxml import etree

parser = etree.XMLParser(remove_comments=False)
tree = etree.parse("input.xml", parser=parser)
root = tree.getroot()

for c in root.findall(".//string[@name='name']"):
    root.remove(c)

tree.write("output.xml")

“input.xml”:

<root>
<!-- I am annotation -->
<string name="name">content</string><string left="left">left things</string>
</root>

“output.xml”:

<root>
<!-- I am annotation -->
<string left="left">left things</string>
</root>

相关问题: