尝试使用Python中的lxml解析XML文件,如何简单地获取元素属性的值?例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<item id="123">
<sub>ABC</sub>
</item>
我想得到结果123,并将其存储为变量。
答案 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')]