2015-02-05 112 views
-1

我試圖寫一個插件來讀取XML文件中的數據讀取XML文件與Python

內的test.xml有:

<data> 
    <items> 
     <item test1="Arabic Words"></item> 
     <item test2="English Words"></item> 
    </items> 
</data> 

而且代碼:

# coding: utf-8 

from xml.dom import minidom 
xmldoc = minidom.parse('test.xml') 
itemlist = xmldoc.getElementsByTagName('item') 

test1 = itemlist[0].attributes['test1'].value 
test2 = itemlist[1].attributes['test2'].value 

print(test1) 
print(test2) 

但是我遇到了編碼問題:我無法將其設置爲utf-8。

如何讓minidom解釋UTF-8編碼的文件?

+1

您是否試過用'xml.sax'解析? – ha9u63ar 2015-02-05 20:00:57

+0

不,那呢? – 2015-02-05 20:01:37

+0

'@ mr.somebody'我想答案是否定的,那麼......還有,你沒有將它設置爲UTF-8的問題是什麼。你能發佈錯誤消息還是至少顯示你的預期結果? – ha9u63ar 2015-02-05 20:02:38

回答

1

典型地,有效的XML始於一個XML pseudotag,將含有編碼:

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

minidom應該尊重;如果你的文件有這樣的標籤,但不被解釋爲UTF-8,你應該提交一個針對minidom的錯誤;但我通常希望你的文件根本不包含這一行。

您可以使用

minidom.parseString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + open("file.xml","r").read()) 

若要解決(但我建議你固定的XML文件)。

+0

謝謝你,現在工作:) – 2015-02-05 20:17:01

+0

你是否修復了你的文件或者添加了字符串離合器?順便說一句(沒有太多的批評,更多的意思是作爲一種靈感):當公開寫作或者在電子郵件中發表某個人時,儘量避免使用「u」;與「你」保持一致,你聽起來不像發送短信的青少年。 – 2015-02-05 20:17:14

+0

是的我加了這個:<?xml version =「1.0」encoding =「UTF-8」?> – 2015-02-05 20:21:37

-1

可以使用編碼/解碼功能或導入編解碼器。

示例: X = 'ABCD' Y = x.encode( 'UTF-8') y.decode( 'UTF-8')

只需使用編碼/解碼,並使用minidom命名解析一個字符串,而不是傳遞文件名。

+0

我試過了,沒有工作 – 2015-02-05 20:02:38

+0

我剛剛用同樣的文件試過了;它可以與編碼/解碼一起工作,無需編碼/解碼,具有BOM,無BOM ...問題必須在其他地方,minidom毫無疑問地解析文件。 – AdrianH 2015-02-05 20:18:23