解析时lxml删除<! - ?xml ...-->标签?

时间:2010-07-12 21:02:47

标签: python xml lxml

我目前正在处理解析XML文档(添加元素,添加属性等)。所以我首先需要在处理它之前解析XML。但是,lxml似乎正在移除元素<?xml ...>。例如

from lxml import etree

tree = etree.fromstring('<?xml version="1.0" encoding="utf-8"?><dmodule>test</dmodule>', etree.XMLParser())
print etree.tostring(tree)

将导致

<dmodule>test</dmodule>

有谁知道为什么要移除<?xml ...>元素?我认为编码标签是有效的XML。谢谢你的时间。

2 个答案:

答案 0 :(得分:6)

<?xml>元素是一个XML声明,因此它不是严格意义上的元素。它只是提供了有关它下面的XML树的信息。

如果你需要用lxml打印出来,这里有一些关于你可以使用的xmlDeclaration=TRUE标志的信息。

http://lxml.de/api.html#serialisation

etree.tostring(tree, xml_declaration=True)

答案 1 :(得分:0)

  

有谁知道为什么要移除<?xml ...>元素?

XML默认为UTF-8版本1.0,因此如果删除文档,则文档是等效的。

您正在将一些XML解析为数据结构,然后将该数据结构转换回XML。您将在XML中获得该数据结构的表示,但可能不会以相同的方式表示(因此可以删除prolog,并且<foo />可以与<foo></foo>交换等等。 / p>