如果您想使用ElementTree在XML文件中保留注释,可以使用http://effbot.org/zone/element-pi.htm中的PIParser
所以,如果我有一个包含
的文件<?xml version="1.0" encoding="iso-8859-1"?>
<!-- This is a comment -->
<root>
<foo>Hello World</foo>
</root>
<!-- That's all, folks -->
然后这两条评论将被保留。
PIParser将xml包装在另一个<document>
节点中,因此可以包含一些来自根节点之外的注释。这两条评论只是<document>
中包含的另外两个元素。
但是我应该如何输出xml?我使用这样的代码输出<document>
的内容,而不输出<document>
标签本身:
file.write('<?xml version="1.0" encoding="%s"?>\n' % encoding)
doc = tree.getroot()
for child in doc:
file.write(ET.tostring(child, encoding, method))
file.write("\n")
现在,如果编码为“utf-8”,那似乎有效。 tostring()方法不输出其中一条<?xml...?>
行,可能是因为utf-8是默认值。这就是我用上面的file.write()明确写<?xml...?>
的原因。但是如果编码是“iso-8859-1”,那么tostring()会将<?xml version="1.0" encoding="iso-8859-1"?>
放在每个调用它的元素的开头!所以我在根节点之外的每个注释前面得到一个,而在根节点本身前面的另一个注释。我不想要那个,我只想在文件的顶部有一个。但是,如上所示,不是获取xml,而是
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml version='1.0' encoding='iso-8859-1'?>
<!-- This is a comment -->
<?xml version='1.0' encoding='iso-8859-1'?>
<root>
<foo>Hello World</foo>
</root>
<?xml version='1.0' encoding='iso-8859-1'?>
<!-- That's all, folks -->
如何控制tostring()是否输出<?xml...?>
?或者,我应该采取另一种方式吗?