2010-07-12 73 views
2

我目前正在解析XML文档(添加元素,添加属性等)。所以我在开始处理之前首先需要解析XML。但是,lxml似乎正在删除元素<?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。谢谢你的时间。

回答

5

<?xml>元素是一个XML声明,所以它不是严格的元素。它只是提供关于它下面的XML树的信息。

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

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

etree.tostring(tree, xml_declaration=True) 
+0

谢谢,这是我正在寻找的。此外,我不得不添加 'etree.tostring(tree,xml_declaration = True,encoding =“utf-8”)' 以获得我想要的编码 – axsuul 2010-07-12 21:19:43

+0

@Axsuul:utf-8是默认编码 – 2010-07-12 21:39:59

0

有谁知道为什么<?xml ...>元素被删除?

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

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

+0

有什么办法,以保持它在那里? – axsuul 2010-07-12 21:07:09

+2

什么?它对任何XML解析器都绝对没有任何区别。 – bobince 2010-07-12 21:12:15