Вы должны взглянуть на XML, который вы получаете. Возможно, проблема в том, что вы получаете не только теги в корневом узле, но и текст.
Например:
>>> xml_doc = minidom.parseString('<root>text<tag></tag></root>')
>>> root = xml.documentElement
>>> root.childNodes
[<DOM Text node "u'root node '...">, <DOM Element: tag at 0x2259368>]
Обратите внимание, что в моем примере первый узел является текстовым, а второй - тегом. Таким образом, root.childNodes[0].tagName
вызывает то же исключение, которое вы получаете, тогда как root.childNodes[1].tagName
возвращает только tag
, как и ожидалось.