2014-07-22 54 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()