2

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")  
4

1 に答える 1

6

使用しているサイトには複数の問題があります。

  • あなたが使用しているサイトは、GET引数として送信していることを尊重しませんtype=xml。代わりに、受け入れヘッダーを送信して、XMLを受け入れることをサイトに伝える必要があります。それ以外の場合はJSONデータを返します

  • サイトが content-type を受け入れていないtext/xmlため、送信する必要がありますapplication/xml

  • あなたのparse呼び出しは正しいです。他の回答では、データを取得する必要があると誤って言及されており、代わりparseにファイル名またはファイルタイプオブジェクトを取得します

だからここに作業コードがあります

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

出力:

[<Element 'HotelList' at 0x248cd90>]

オブジェクトを作成してヘッダーRequestを渡していることに注意してくださいAccept

ところで、サイトが JSON を返す場合、XML を解析する必要があるのはなぜですか。JSON の解析はより簡単で、既製の Python オブジェクトを取得できます。

于 2012-04-06T15:56:07.667 に答える