2010-07-12 75 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