使用 lxml 获取第一个元素的属性
Get attribute of first element using lxml
尝试在 Python 中使用 lxml 解析 XML 文件,我如何简单地获取元素属性的值?示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<item id="123">
<sub>ABC</sub>
</item>
我想得到结果 123,并将其存储为一个变量。
使用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'
或者,您可以使用 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']
我认为 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')]
尝试在 Python 中使用 lxml 解析 XML 文件,我如何简单地获取元素属性的值?示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<item id="123">
<sub>ABC</sub>
</item>
我想得到结果 123,并将其存储为一个变量。
使用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'
或者,您可以使用 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']
我认为 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')]