使用Python解析XML文件,同时提取属性和子项

时间:2014-07-22 19:23:55

标签: 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属性? 谢谢你的帮助。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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

从那里你可以决定存储/输出值的位置