Пространства имен Grrr .... попробуйте это:
STW_PREFIX = "{http://www.shrinktheweb.com/doc/stwresponse.xsd}"
(см. Строку 2 вашего образца XML)
Тогда, когда вы хотите тег типа stw:StatusCode
, используйте STW_PREFIX + "StatusCode"
Обновление: этот XML-ответ не самый блестящий дизайн. Из вашего единственного примера невозможно угадать, может ли быть более 1 узла 2-го уровня. Обратите внимание, что у каждого узла 3-го уровня есть дочерний элемент «StatusCode». Вот примерный и готовый код, который показывает вам (1), почему вам нужен этот STW_PREFIX caper (2) фрагмент полезной информации.
import xml.etree.cElementTree as et
def showtag(elem):
return repr(elem.tag.rsplit("}")[1])
def showtext(elem):
return None if elem.text is None else repr(elem.text.strip())
root = et.fromstring(xml_response) # xml_response is your input string
print repr(root.tag) # see exactly what tag is in the element
for child in root[0]:
print showtag(child), showtext(child)
for gc in child:
print "...", showtag(gc), showtext(gc), gc.attrib
Результат:
'{http://www.shrinktheweb.com/doc/stwresponse.xsd}ThumbnailResponse'
'ThumbnailResult' ''
... 'Thumbnail' None {'Exists': 'false'}
... 'Thumbnail' 'fix_and_retry' {'Verified': 'false'}
'ResponseStatus' ''
... 'StatusCode' 'Blank Detected' {}
'ResponseTimestamp' ''
... 'StatusCode' None {}
'ResponseCode' ''
... 'StatusCode' None {}
'CategoryCode' ''
... 'StatusCode' 'none' {}
'Quota_Remaining' ''
... 'StatusCode' '1' {}