2012-04-06 15 views
2

Ich habe eine kleine Funktion geschrieben, die ElementTree verwendet, um XML-Datei zu analysieren, aber es wirft den folgenden Fehler "xml.etree.ElementTree.ParseError: nicht wohlgeformt (ungültiges Token): Zeile 1, Spalte 0 ". bitte den Code zu finden unterXML-Parsing mit ElementTree

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") 
+0

Kann nützlich sein, um die erste Zeile der XML-Datei zu sehen. Mögliches Duplikat von http://stackoverflow.com/questions/6260144/expaterror-not-well-formed-invalid-token. – ClassicThunder

Antwort

6

Es gibt mehrere Probleme mit der Website, die Sie verwenden:

  • Website Sie irgendwie verwenden type=xml nicht ehren Sie als GET arg senden, stattdessen werden Sie müssen senden Header akzeptieren, sagen Website, die Sie XML anderes akzeptieren es gibt JSON-Daten

  • Seite nicht content-type akzeptiert text/xml so müssen Sie senden application/xml

  • Ihr parse Anruf ist richtig, es zu Unrecht in anderen Antwort erwähnt ist, dass sie Daten übernehmen sollte, stattdessen parse Dateinamen oder Dateityp Objekt

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 
So, hier ist der Arbeitscode nimmt

Ausgabe:

[<Element 'HotelList' at 0x248cd90>] 

Hinweis icherschaffeObjekt und vorbei Accept Kopf

btw wenn Website JSON zurückzugibt, warum Sie XML analysieren müssen, Parsing JSON ist einfacher, und Sie werden ein fertiges Python-Objekt zu bekommen.

+0

Danke Rik Poggi. es funktioniert jetzt.... – user1118818