2015-12-01 2 views
0

Пытается разобрать XML-файл с использованием lxml в Python, как просто получить значение атрибута элемента? Пример:Получить атрибут первого элемента, используя lxml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<item id="123"> 
    <sub>ABC</sub> 
</item> 

Я хочу получить результат 123 и сохранить его как переменную.

ответ

0

При использовании etree.parse() просто позвоните .getroot(), чтобы получить корневой элемент; атрибут .attrib представляет собой словарь всех атрибутов, использовать, чтобы получить значение:

>>> from lxml import etree 
>>> tree = etree.parse('test.xml') 
>>> tree.getroot().attrib['id'] 
'123' 

Если вы использовали etree.fromstring() возвращаемый объект является корневым объектом уже, так что не требуется .getroot() вызова:

>>> tree = etree.fromstring('''\ 
... <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
... <item id="123"> 
...  <sub>ABC</sub> 
... </item> 
... ''') 
>>> tree.attrib['id'] 
'123' 
0

в качестве альтернативы, вы можете использовать селектор XPath:

>>> from lxml import etree 
>>> tree = etree.fromstring(b'''<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<item id="123"> 
    <sub>ABC</sub> 
</item>''') 
>>> tree.xpath('/item/@id') 
['123'] 
0

Я думаю, Мартейн ответил на ваш вопрос. Основываясь на его ответе, вы также можете использовать метод items(), чтобы получить список кортежей с атрибутами и значениями. Это может быть полезно, если вам нужны значения нескольких атрибутов. Как так:

>>> from lxml import etree 
>>> tree = etree.parse('test.xml') 
>>> item = tree.xpath('/item') 
>>> item.items() 
[('id', '123')] 

Или в случае строки:

>>> tree = etree.fromstring("""\ 
... <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
... <item id="123"> 
...  <sub>ABC</sub> 
... </item> 
... """) 
>>> tree.items() 
[('id', '123')] 
Смежные вопросы