2014-07-22 58 views
0

我想讀在Python它的基本格式如下的XML文件:(該片段重複很多次)解析與Python XML文件,而提取的屬性和兒童

<item id="1149" num="1" type="topic"> 
    <title>Afghanistan</title> 
    <additionalInfo>Afghanistan</additionalInfo> 
</item> 

我試圖將id值和title值打印到文件中。 目前,我無法將XML文件導入Python。目前,我這樣做是爲了讓XML文件:

import xml.etree.ElementTree as ET 
from urllib2 import urlopen 

url = 'http://api.npr.org/list?id=3002' #1007 is science 
response = urlopen(url) 
f = open('out.xml', 'w') 
f.write(response) 

但是,每當我運行此代碼,我得到錯誤Traceback (most recent call last): File "python", line 9, in <module> TypeError: expected a character buffer object,這讓我覺得我沒有使用的東西,可以處理XML。 有什麼辦法可以將XML文件保存到文件中,然後提取每個部分的title以及與該標題關聯的id屬性? 感謝您的幫助。

回答

0

你想要的是response.read()而不是response。響應變量是一個不是xml字符串的實例。通過執行response.read()它將從響應實例中讀取xml。

然後,您可以直接寫入到一個文件中像這樣:

url = 'http://api.npr.org/list?id=3002' #1007 is science 
response = urlopen(url) 
f = open('out.xml', 'w') 
f.write(response.read()) 

另外,您也可以直接解析它變成了ElementTree像這樣:

url = 'http://api.npr.org/list?id=3002' #1007 is science 
response = urlopen(url) 
tree = ET.fromstring(response.read()) 

提取所有的ID /標題對你可以做以下以及:

url = 'http://api.npr.org/list?id=3002' #1007 is science 
response = urlopen(url) 
tree = ET.fromstring(response.read()) 
for item in tree.findall("item"): 
    print item.get("id") 
    print item.find("title").text 

從那裏你可以ñ決定存儲/輸出

+0

感謝您的回答,這精美地工作。 – user3864836

1

您可以通過這個代碼讀取響應的內容的值:

import urllib2 
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler(),urllib2.HTTPCookieProcessor()) 
response= opener.open("http://api.npr.org/list?id=3002").read() 
opener.close() 

然後把它寫入到文件:

f = open('out.xml', 'w') 
f.write(response) 
f.close()