Для:
<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'
<image height="940" id="0" name="C02032-390.jpg" width="1820"> <box label="Objects" occluded="1" xbr="255" xtl="0" ybr="624" ytl="509"> <attribute name="Class">Car</attribute> </box> </image>
Я хотел бы получить доступ к машине из атрибута.
- person Sanjay; 14.03.2020
Получение значения атрибута дочернего тега в 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
дочерних элементов
Конечно, вам нужно подумать об использовании полностью совместимого механизма XPath, такого как lxml.
ElementTree
API - это не полноценный движок XPath для жалоб...
- person ; 01.01.2011
bar/@key
, и вы должны использовать xxx.attribut.get("key")
для соответствующего xxx
.
- person Don Smith; 17.11.2020
Следующим методом вы можете получить все атрибуты из 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)
Функция dipenparmar12 не будет возвращать дочерние атрибуты детей. Эта функция будет
import xml.etree.ElementTree as etree
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,attributes)
return attributes
attributes = get_attr(xml,[])
print(attributes)