2010-05-24 64 views
0

我想用lxml和Python打印XML文件。擺脫lxml中的編碼

下面是代碼:

>>> from lxml import etree 
>>> root = etree.Element('root') 
>>> child = etree.SubElement(root, 'child') 
>>> print etree.tostring(root, pretty_print = True, xml_declaration = True, encoding = None) 

輸出:

<?xml version='1.0' encoding='ASCII'?> 
<root> 
    <child/> 
</root> 

正如你所看到的,我已經宣佈encoding = None,但它仍然顯示在最終輸出encoding = 'ASCII'。我猜是我的預期。如果我沒有放入encoding標籤,它仍然顯示ASCII。

有沒有什麼辦法可以得到XML版本標籤而不是編碼部分?我想輸出是這樣的:

<?xml version='1.0'> 

回答

0

只要它是有效的XML,它應該不會有什麼lxml.etree輸出。如果你真的想,你能膠字符串連接在一起:

'<?xml version="1.0"?>\n' + etree.tostring(root, pretty_print = True, encoding = 'ASCII') 

目前還不清楚爲什麼要刪除它,因爲最終XML需要知道什麼字符集是在做任何事情的意義。所述XML 1.0 spec包括猜測字符集的方法,而且似乎鼓勵使用編碼聲明:

在缺乏[外部信息],它是一個致命的錯誤...爲與既不是開始的實體字節順序標記或編碼聲明使用UTF-8以外的編碼。

...

除非的編碼是通過更高級別的協議確定的,它也是一個致命的錯誤,如果XML實體不包含編碼聲明,其內容爲不合法的UTF-8或UTF-16 。

+0

呃好的。我會查看它。感謝你的回答。 – user225312 2010-05-24 19:50:06