Как извлечь атрибут XML с помощью Python ElementTree - PullRequest
26 голосов
/ 01 января 2011

Для:

<foo>
 <bar key="value">text</bar>
</foo>

Как получить "значение"?

xml.findtext("./bar[@key]")

Выдает ошибку.

Ответы [ 4 ]

41 голосов
/ 01 января 2011

Это найдет первый экземпляр элемента с именем 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'
2 голосов
/ 26 апреля 2018

Получение значения атрибута дочернего тега в 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()
1 голос
/ 01 января 2011

Ваше выражение:

. / Bar [@key]

Это означает: bar дети, имеющие key атрибут

Если вы хотите выбрать атрибут, используйте это относительное выражение:

bar/@key

Это означает: атрибут key bar children

Конечно, вы должны рассмотреть возможность использования полностью совместимого движка XPath, например lxml .

0 голосов
/ 18 мая 2019

Следующим методом вы можете получить все атрибуты из 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)
...