xml parsing using ElementTree

django, python, xml

Solution

There are multiple problems with the site you are using:

Site you are using somehow doesn't honour `type=xml` you are sending as GET arg, instead you will need to send accept header, telling site that you accept XML else it returns JSON data

Site is not accepting content-type `text/xml` so you need to send `application/xml`

Your `parse` call is correct, it is wrongly mentioned in other answer that it should take data, instead `parse` takes file name or file type object

So here is the working code

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>]

Note I am creating a `Request` object and passing `Accept` header

btw if site is returning JSON why you need to parse XML, parsing JSON is simpler and you will get a ready made python object.

Problem

I have written a small function, which uses ElementTree to parse xml file,but it is throwing the following error "xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 0". please find the code below ``` 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") ```

Original source