Python ElementTree 获取前一个有条件的属性
Python ElementTree get previous attrib with a condition
我正在处理 XML 个文件。我的文件是这样的:
import xml.etree.ElementTree as ET
xml = '''
<root>
<a name='name1' label='label1'
<b>
<result para='1'
</b>
</a>
<a name='name2' label='label2'
<b>
<result para='2'
</b>
</a>
<a name='name3' label='label3'
<b>
<result para='3'
</b>
</a>
</root>
'''
myroot = ET.fromstring(xml)
如果 b
的参数等于 1,我想打印 a
的标签。
我有这个代码:
for type_tag in myroot.findall('.//result'):
if type_tag.attrib['para'] == '1':
但我不知道如何返回a
打印标签。
任何帮助将不胜感激:)
提前致谢
按照建议,我把问题倒过来解决了:
for type_tag in myroot.findall('a'):
lab = type_tag.attrib['label']
for e in type_tag.findall('./b/result'):
if e.attrib['para'] == '1':
print(lab)
另一种更简短的方法是使用 xpath:
for type_tag in myroot.findall('.*//result[@para="1"]/../..'):
print(type_tag.attrib['label'])
话虽如此,ET 仅支持 xpath 的有限子集。所以如果你有更复杂的 xml 来处理并且可以访问 lxml,你应该尝试使用它。
我正在处理 XML 个文件。我的文件是这样的:
import xml.etree.ElementTree as ET
xml = '''
<root>
<a name='name1' label='label1'
<b>
<result para='1'
</b>
</a>
<a name='name2' label='label2'
<b>
<result para='2'
</b>
</a>
<a name='name3' label='label3'
<b>
<result para='3'
</b>
</a>
</root>
'''
myroot = ET.fromstring(xml)
如果 b
的参数等于 1,我想打印 a
的标签。
我有这个代码:
for type_tag in myroot.findall('.//result'):
if type_tag.attrib['para'] == '1':
但我不知道如何返回a
打印标签。
任何帮助将不胜感激:)
提前致谢
按照建议,我把问题倒过来解决了:
for type_tag in myroot.findall('a'):
lab = type_tag.attrib['label']
for e in type_tag.findall('./b/result'):
if e.attrib['para'] == '1':
print(lab)
另一种更简短的方法是使用 xpath:
for type_tag in myroot.findall('.*//result[@para="1"]/../..'):
print(type_tag.attrib['label'])
话虽如此,ET 仅支持 xpath 的有限子集。所以如果你有更复杂的 xml 来处理并且可以访问 lxml,你应该尝试使用它。