59

为了:

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

我如何获得“价值”?

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

引发错误。

4

5 回答 5

74

这将找到名为元素的第一个实例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'
于 2011-01-01T05:56:58.220 回答
10

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

解析 XML 文件并获取root标签,然后使用[0]将给我们第一个子标签。同样[1], [2]给我们后续的子标签。获取子标签后,.attrib[attribute_name]用于获取该属性的值。

>>> 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()
于 2018-04-26T14:25:57.653 回答
1

你的表情:

./bar[@key]

意思是:有属性bar的孩子key

如果要选择属性,请使用以下相对表达式:

bar/@key

意思是:孩子key属性bar

当然,您需要考虑使用完全兼容的 XPath 引擎,例如lxml

于 2011-01-01T16:56:23.383 回答
0

通过以下方法,您可以从 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)
于 2019-05-18T14:24:12.027 回答
0

dipenparmar12 函数不会返回孩子的子属性。因为该函数是递归的,所以每次调用的属性列表都将设置为一个空列表。此函数将返回孩子的孩子。

import xml.etree.ElementTree as etree
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,attributes)
     return attributes

  attributes = get_attr(xml,[])
  print(attributes)
于 2021-01-08T13:51:22.487 回答