如何使用Python ElementTree提取XML属性

71 投票
6 回答
171419 浏览
提问于 2025-04-16 09:16

为了:

<foo>
 <bar key="value">text</bar>
</foo>

我该怎么获取“值”?

xml.findtext("./bar[@key]")

会报错。

6 个回答

2

通过以下方法,你可以从XML中获取所有属性,并把它们放到一个字典里。

import xml.etree.ElementTree as etree
xmlString= "<feed xml:lang='en'><title>World Wide Web</title><subtitle lang='en'>Programming challenges</subtitle><link rel='alternate' type='text/html' href='http://google.com/'/><updated>2019-12-25T12:00:00</updated></feed>"
xml= etree.fromstring(xmlString)  

def get_attr(xml):
    attributes = []
    for child in (xml):
        if len(child.attrib)!= 0:
            attributes.append(child.attrib)
        get_attr(child)
    return attributes
attributes = get_attr(xml)

print(attributes)
12

使用ElementTree获取XML中子标签的属性值

首先,解析XML文件,获取root标签。然后,使用[0]可以得到第一个子标签。类似地,[1][2]分别可以得到后续的子标签。获取到子标签后,使用.attrib[属性名]就可以得到这个属性的值。

>>> import xml.etree.ElementTree as ET
>>> xmlstr = '<foo><bar key="value">text</bar></foo>'
>>> root = ET.fromstring(xmlstr)
>>> root.tag
'foo'
>>> root[0].tag
'bar'
>>> root[0].attrib['key']
'value'

如果XML内容在文件中,你需要执行以下操作来获取root

>>> tree = ET.parse('file.xml')
>>> root = tree.getroot()
87

这段代码会找到第一个名为 bar 的元素,并返回它的 key 属性的值。

In [52]: import xml.etree.ElementTree as ET

In [53]: xml=ET.fromstring(contents)

In [54]: xml.find('./bar').attrib['key']
Out[54]: 'value'

撰写回答