如何在ElementTree PIParser中输出元素?

时间:2016-10-13 17:27:04

标签: python xml elementtree

如果您想使用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...?>?或者,我应该采取另一种方式吗?

0 个答案:

没有答案