我正在尝试构建一个 python脚本,它将接收 XML文档并从中删除所有注释块.
我尝试过以下方面:
1
2
3
4
5
6
7 1tree = ElementTree()
2tree.parse(file)
3commentElements = tree.findall('//comment()')
4
5for element in commentElements:
6 element.parentNode.remove(element)
7
这样做会从python中产生一个奇怪的错误:“KeyError:'()’
我知道有很多方法可以使用其他方法(如sed)轻松编辑文件,但我必须在python脚本中完成.
comment()是ElementTree不支持的XPath节点测试.
你可以在lxml上使用comment().这个库与ElementTree非常相似,它完全支持XPath 1.0.
以下是使用lxml删除注释的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1from lxml import etree
2
3XML = """<root>
4 <!-- COMMENT 1 -->
5 <x>TEXT 1</x>
6 <y>TEXT 2 <!-- COMMENT 2 --></y>
7</root>"""
8
9tree = etree.fromstring(XML)
10
11comments = tree.xpath('//comment()')
12
13for c in comments:
14 p = c.getparent()
15 p.remove(c)
16
17print etree.tostring(tree)
18
输出:
1
2
3
4
5 1<root>
2 <x>TEXT 1</x>
3 <y>TEXT 2 </y>
4</root>
5