使用lxml获取第一个元素的属性

时间:2015-12-01 19:58:56

标签: python lxml

尝试使用Python中的lxml解析XML文件,如何简单地获取元素属性的值?例如:

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

我想得到结果123,并将其存储为变量。

3 个答案:

答案 0 :(得分:2)

使用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'

答案 1 :(得分:1)

或者,您可以使用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']

答案 2 :(得分:0)

我认为Martijn已经回答了你的问题。基于他的答案,您还可以使用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')]