2011-12-15 56 views
0

我是相當新的Python和我只是試圖解析一個簡單的Web的API,它返回以下XML語法的結果:Python的minidom命名element.data只返回對象,而不是文本

<rss version='2.0'> 
<channel> 
<title>www.onlinetvrecorder.com</title> 
<description>OTR Torrents</description> 
<link>http://www.onlinetvrecorder.com/</link> 
<copyright>OTR</copyright> 
<STATIONS> 
    <ITEM> 
     <TITLE>3SAT</TITLE> 
     <COUNTRY>DE</COUNTRY> 
     <LANGUAGE>DE</LANGUAGE> 
    </ITEM> 
    <ITEM> 
     <TITLE>ANIXE</TITLE> 
     <COUNTRY>DE</COUNTRY> 
     <LANGUAGE>DE</LANGUAGE> 
    </ITEM> 
    <ITEM> 
     <TITLE>ARD</TITLE> 
     <COUNTRY>DE</COUNTRY> 
     <LANGUAGE>DE</LANGUAGE> 
    </ITEM> 
</STATIONS> 
</channel> 
</rss> 

我解析器看起來像這樣:

import xml.dom.minidom as dom 

def parseStations(stationsResult): 

    document = dom.parse(stationsResult) 

    stations = [] 

    #get all ITEM elements and get their child TITLE 
    items = document.getElementsByTagName("ITEM") 

    for item in items: 
     stationTitleNodeValue = item.getElementsByTagName("TITLE")[0].firstChild.data 
     stations.append(stationTitleNodeValue); 

    return stations 

我的意圖是在XML中獲取TITLE Elements的文本值。但是當打印返回列表的內容到控制檯時,它看起來像這樣:

<DOM Element: TITLE at 0x368e8c0> 

我在做什麼錯了?你能幫助我嗎? 謝謝您(非常感謝!)提前,

基督教

+0

調用你的功能與您的數據回報`[u'3SAT',u'ANIXE「 u'ARD」]`在Python 2.7我。不知道你爲什麼會不同。 – 2011-12-16 00:16:09

回答

0

似乎工作確定了我。你會得到一個DOM元素對象,它在大多數情況下作爲一個字符串工作。因此,print x[0]等(其中x是函數的返回值)通常會得到您所尋找的結果。

如果你只是想站名作爲字符串列表,然後將其轉換爲字符串(XML是Unicode或它們的子集,所以你應該使用Unicode字符串):

stations.append(unicode(stationTitleNodeValue)) 

BTW,你已經寫了可以在列表中理解更緊湊表示:

def parseStations(stationsResult): 
    return [unicode(item.getElementsByTagName("TITLE")[0].firstChild.data) 
      for item in dom.parse(stationsResult).getElementsByTagName("ITEM")] 
+0

謝謝,爲我工作! – cschwarz 2011-12-18 13:30:46

相關問題