2015-12-01 66 views
0

嘗試使用Python中的lxml解析XML文件,我該如何簡單地獲取元素屬性的值?例如:使用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')]