有关:
<foo>
<bar key="value">text</bar>
</foo>
我如何获得“价值”?
xml.findtext("./bar[@key]")
引发错误。
答案 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]
这意味着: bar
有key
属性的孩子
如果要选择属性,请使用此相对表达式:
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)