2012-12-21 39 views
-1

我已經編寫了一個Python腳本來創建一些XML,但是我沒有找到編輯Python中標題的方法。使用Python編輯XML標題

基本上,而不必將此作爲我的標題:

<?xml version="1.0" ?> 

我需要這樣的:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

我看着這是盡我所能,卻發現沒有辦法添加獨立來自Python內部的狀態。所以我認爲我必須在文件創建完成後重新查看文件,然後替換文本。我在幾個地方讀過,我應該遠離使用readlines(),因爲它可能會破壞XML格式。

目前我的代碼來做到這一點 - 這是我從另一個職位#1關於使用Python編輯XML得到了 - 是:

doc = parse('file.xml') 
elem = doc.find('xml version="1.0"') 
elem.text = 'xml version="1.0" encoding="UTF-8" standalone="no"' 

這爲我提供了一個KeyError異常。我試圖調試它無濟於事,這導致我相信也許XML標題並不打算以這種方式進行編輯。或者我的代碼錯了。

如果有人好奇(或奇蹟般地知道如何將獨立狀態到Python代碼),這裏是我的代碼寫的xml文件:

with open('file.xml', 'w') as f: 
    f.write(doc.toprettyxml(indent='    ')) 

有些人不喜歡「toprettyxml」,但與我相對基本的水平,這似乎是最好的選擇。

無論如何,如果有人能提供一些建議或見解,我將非常感激。

+0

你在使用API​​,什麼Python版本? –

+0

@MartijnPieters Python 2.7.3和我正在使用IDLE。謝謝。 –

+0

IDLE是一個IDE,不是XML API。您是否使用['xml.etree.ElementTree'庫](http://docs.python.org/2/library/xml.etree.elementtree.html)? –

回答

0

xml.etree API不提供任何選項來在XML聲明中寫出standalone屬性。

您可能需要改用lxml library;它使用相同的ElementTree API,但提供了對輸出的更多控制。 tostring()支持standalone標誌:

from lxml import etree 

etree.tostring(doc, pretty_print=True, standalone=False) 

或使用.write(),支持相同的選項:

doc.write(outputfile, pretty_print=True, standalone=False) 
+0

我遇到過這種情況,但希望堅持Python標準庫。我想現在可能不行。我會試試lxml。 –

+0

@CreativeName:另一種方法是在沒有聲明的情況下編寫其餘的XML之前自行寫出聲明。 –