如何使用Python ElementTree提取xml属性

时间:2011-01-01 05:16:22

标签: python xml xpath elementtree

有关:

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

我如何获得“价值”?

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

引发错误。

5 个答案:

答案 0 :(得分:41)

这将找到名为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'

答案 1 :(得分:2)

使用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()

答案 2 :(得分:1)

你的表达:

  

./巴[@key]

这意味着: barkey属性的孩子

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

bar/@key

这意味着: key孩子的bar属性

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

答案 3 :(得分:0)

通过以下方法,您可以从xml中获取所有属性(在Dictionary中)

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)

答案 4 :(得分: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)