С макушки моей головы:
import xml.dom.minidom as minidom
doc = minidom.parse('/tmp/tes.xml')
location = doc.getElementsByTagName('location')[0]
# If I recall carriage return and spaces are text nodes so we
# need to skip those
username = list(filter(lambda x: x.nodeType == minidom.Node.ELEMENT_NODE, location.childNodes))
print(username[0].firstChild.nodeValue)
Вы предполагаете, что username
является атрибутом location
, а это не так. Это дочерний узел, и он содержит другую дочернюю заметку, которая является текстом. Minidom довольно громоздок, поэтому, если вам действительно не придется работать с ним (из соображений безопасности), я советую вам использовать xml.etree.ElementTree
UPDATE
Оператор запросил пример с использованием ET:
import xml.etree.ElementTree as ET
sample = """
<computer>
<location>
<username>FirsLast</username>
</location>
</computer>
"""
doc = ET.fromstring(sample)
username = doc.findall('./location/username')
print(username[0].text)