我有以下代码可以工作并给我预期的输出。
#!/bin/env python
import xml.etree.ElementTree as e
tree = e.parse("Document.XML")
root = tree.getroot()
vals=[]
代码的以下部分可以是单行还是更紧凑?
for ch in root.findall('arch'):
for gc in ch.findall('pro'):
vals.append(gc.get('label'))
我拥有的libxml2版本不支持xpath
,请不要建议该选项。 XMl文件如下所示:
<projects>
<arch name="arch1">
<pro label="A1" type="B1" state="C1"/>
....
</arch>
....
</projects>
答案 0 :(得分:6)
当然,使用带有两个循环的列表推导:
vals = [gc.get('label') for ch in root.findall('arch') for gc in ch.findall('pro')]
答案 1 :(得分:1)
使用xmltodict你可以做一些像
这样的事情data = xmltodict.parse("Document.XML")
val = data['arch']['pro']['@label']
你必须使用我的伪代码来为多个val
添加列表理解,但上面应该说明基本用法(并参见git页面)。 Bruno Rocha最近发表了关于xmltodict的博文。