[英]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.