繁体   English   中英

xml 使用 ElementTree 解析

[英]xml parsing using ElementTree

我写了一个小的 function,它使用 ElementTree 来解析 xml 文件,但它抛出以下错误“xml.etree.ElementTree.ParseError:格式不正确(无效令牌):第 1 行,第 0 列”。 请找到下面的代码

tree = ElementTree.parse(urllib2.urlopen('http://api.ean.com/ean-services/rs/hotel/v3/list?type=xml&apiKey=czztdaxrhfbusyp685ut6g6v&cid=8123&locale=en_US&city=Dallas%20&stateProvinceCode=TX&countryCode=US&minorRev=12'))

rootElem = tree.getroot()

hotel_list = rootElem.findall("HotelList")  

您使用的网站存在多个问题:

  • 您正在使用的网站以某种方式不尊重您作为 GET arg 发送的type=xml ,相反您需要发送接受 header,告诉网站您接受 XML 否则它返回 JSON 数据

  • 站点不接受内容类型text/xml ,因此您需要发送application/xml

  • 您的parse调用是正确的,在其他答案中错误地提到它应该获取数据,而不是parse获取文件名或文件类型 object

所以这是工作代码

import urllib2
from xml.etree import ElementTree

url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?type=xml&apiKey=czztdaxrhfbusyp685ut6g6v&cid=8123&locale=en_US&city=Dallas%20&stateProvinceCode=TX&countryCode=US&minorRev=12'
request = urllib2.Request(url, headers={"Accept" : "application/xml"})
u = urllib2.urlopen(request)
tree = ElementTree.parse(u)
rootElem = tree.getroot()
hotel_list = rootElem.findall("HotelList")  
print hotel_list

output:

[<Element 'HotelList' at 0x248cd90>]

注意我正在创建一个Request object 并传递Accept header

顺便说一句,如果站点返回 JSON 为什么需要解析 XML,解析 JSON 更简单,您将得到现成的 python object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM