pythonxmlurllib2elementtreecelementtree

ElementTree XML parsing and urllib2.urlopen


I'm opening a URL using:

response = urllib2.urlopen(url, data, timeout=_TIMEOUT)

and using response.read(), it gives the following output:

<XMLlookup licenseid="X4X6X42" reason="OK" status="1" />

but when I want to parse it using ElementTree, like so:

print response.read()
t = ET.parse(response)
r = t.getroot()
print r.attrib.get('status')

gives me the following error message:

File "<string>", line 62, in parse
File "<string>", line 38, in parse
cElementTree.ParseError: no element found: line 1, column 0

but when I remove the line response.read(), the code works fine. What am I doing wrong?


Solution

  • You can only read once a response, because it is a file object like (in fact a addinfourl). Subsequent calls to read will return an empty string since you have always read the whole text.

    So either you do not call read before using ET.parse(response), or you store the result in a string and use it for ET :

    txt = response.read()
    # do what you want with txt (without changing it)
    t = ET.fromstring(txt)