簡體   English   中英

使用minidom解析xml

[英]using minidom to parse xml

嗨,我無法理解Python的minidom模塊。

我有xml看起來像這樣:

<Show>
<name>Dexter</name>
<totalseasons>7</totalseasons>
<Episodelist>
<Season no="1">
<episode>
<epnum>1</epnum>
<seasonnum>01</seasonnum>
<prodnum>101</prodnum>
<airdate>2006-10-01</airdate>
<link>http://www.tvrage.com/Dexter/episodes/408409</link>
<title>Dexter</title>
</episode>
<episode>
<epnum>2</epnum>
<seasonnum>02</seasonnum>
<prodnum>102</prodnum>
<airdate>2006-10-08</airdate>
<link>http://www.tvrage.com/Dexter/episodes/408410</link>
<title>Crocodile</title>
</episode>
<episode>
<epnum>3</epnum>
<seasonnum>03</seasonnum>
<prodnum>103</prodnum>
<airdate>2006-10-15</airdate>
<link>http://www.tvrage.com/Dexter/episodes/408411</link>
<title>Popping Cherry</title>
</episode>

更漂亮: http//services.tvrage.com/feeds/episode_list.php? sid = 7926

這是我試圖從中讀取的python代碼:

xml = minidom.parse(urlopen("http://services.tvrage.com/feeds/episode_list.php?sid=7926"))
for episode in xml.getElementsByTagName('episode'):
    for node in episode.attributes['title']:
        print node.data

我無法獲得實際的劇集數據,因為我想從每集中獲取所有數據。 我嘗試了不同的變種,但我無法讓它發揮作用。 大多數情況下,我得到一個<DOM Element: asdasd> 我只關心每集中的數據。

謝謝您的幫助

title不是屬性,它是一個標記。 一個屬性是像src<img src="foo.jpg" />

>>> parsed = parseString(s)
>>> titles = [n.firstChild.data for n in parsed.getElementsByTagName('title')]
>>> titles
[u'Dexter', u'Crocodile', u'Popping Cherry']

您可以擴展上面的內容以獲取其他詳細信息。 lxml更適合這個。 正如你從上面的片段中看到的那樣minidom並不那么友好。

每個episode元素都有子元素,包括title元素。 但是,您的代碼正在尋找屬性

要從minidom元素中獲取文本,您需要一個輔助函數:

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)

然后你可以更輕松地打印所有標題:

for episode in xml.getElementsByTagName('episode'):
    for title in episode.getElementsByTagName('title'):
        print getText(title)

感謝Martijn Pieters向我提供了ElementTree API,我解決了這個問題。

xml = ET.parse(urlopen("http://services.tvrage.com/feeds/episode_list.php?sid=7296"))
                print 'xml fetched..'
                for episode in xml.iter('episode'):
                    print episode.find('title').text

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM