python中xml.etree.ElementTree忽略注释令人头疼,今天终于解决了
默认情况下,当使用ElementTree模块修改XML文件时,保存后会丢失原文件中的注释。
方法一:使用该方法可以使得在生成树的时候获得本来有的注释。
#!/usr/bin/env python
# CommentedTreeBuilder.py
from xml.etree import ElementTree
class CommentedTreeBuilder(ElementTree.TreeBuilder):
def comment(self, data):
self.start(ElementTree.Comment, {})
self.data(data)
self.end(ElementTree.Comment)
parser = ElementTree.XMLParser(target=CommentedTreeBuilder())
tree = ElementTree.parse( r'c:\test.xml', parser = parser)
root = tree.getroot()
for rank in root.iter('rank'):
new_rank = int(rank.text) + 1
rank.text = str(new_rank)
rank.set('updated', 'yes')
tree.write('c:\test.xml', encoding='utf-8', xml_declaration=True)
即可以读取到注释了。 亲测有效
方法二,直接使用lxml库,或者使用下面的方式也可以。
import lxml.etree as ET
tree = ET.parse(filename)