1

我有以下代码可以工作并给我预期的输出。

#!/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>
4

2 回答 2

6

当然,使用带有两个循环的列表推导:

vals = [gc.get('label') for ch in root.findall('arch') for gc in ch.findall('pro')]
于 2013-08-22T22:30:32.153 回答
1

使用xmltodict你可能只是做类似的事情

data = xmltodict.parse("Document.XML")
val = data['arch']['pro']['@label']

您必须使用我的伪代码来添加多个vals 的列表理解,但上面应该说明基本用法(并参见 git 页面)。 Bruno Rocha最近写了一篇关于 xmltodict 的博客。

于 2013-08-22T22:44:40.500 回答