Для:
<foo>
<bar key="value">text</bar>
</foo>
Как мне получить "значение"?
xml.findtext("./bar[@key]")
Выдает сообщение об ошибке.
Для:
<foo>
<bar key="value">text</bar>
</foo>
Как мне получить "значение"?
xml.findtext("./bar[@key]")
Выдает сообщение об ошибке.
Это найдет первый экземпляр элемента с именем bar
и вернет значение key
атрибута.
In [52]: import xml.etree.ElementTree as ET
In [53]: xml=ET.fromstring(contents)
In [54]: xml.find('./bar').attrib['key']
Out[54]: 'value'
Получение значения атрибута дочернего тега в XML с использованием ElementTree
Разобрать файл XML и получить root
тег, а затем с помощью [0]
получим первый дочерний тег. Точно так же [1], [2]
дает нам последующие дочерние теги. После получения дочернего тега используйте .attrib[attribute_name]
чтобы получить значение этого атрибута.
>>> import xml.etree.ElementTree as ET
>>> xmlstr = '<foo><bar key="value">text</bar></foo>'
>>> root = ET.fromstring(xmlstr)
>>> root.tag
'foo'
>>> root[0].tag
'bar'
>>> root[0].attrib['key']
'value'
Если содержимое XML находится в файле. Вы должны выполнить нижеприведенную задачу, чтобы получить root
.
>>> tree = ET.parse('file.xml')
>>> root = tree.getroot()
Ваше выражение:
./бар [@key]
Это означает: bar
дети с атрибутом key
Если вы хотите выбрать атрибут, используйте это относительное выражение:
bar/@key
Это означает: атрибут key
bar
children
Конечно, вам нужно рассмотреть возможность использования полностью совместимого механизма XPath, например lxml.
Следующим методом вы можете получить все атрибуты из XML (в словаре)
import xml.etree.ElementTree as etree
xmlString= "<feed xml:lang='en'><title>World Wide Web</title><subtitle lang='en'>Programming challenges</subtitle><link rel='alternate' type='text/html' href='http://google.com/'/><updated>2019-12-25T12:00:00</updated></feed>"
xml= etree.fromstring(xmlString)
def get_attr(xml):
attributes = []
for child in (xml):
if len(child.attrib)!= 0:
attributes.append(child.attrib)
get_attr(child)
return attributes
attributes = get_attr(xml)
print(attributes)