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

確かに、2 つのループでリスト内包表記を使用します。

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']

複数の のリスト内包表記を追加するには、私の疑似コードをいじる必要がありますvalが、上記は基本的な使用法を示しているはずです (そして git ページを参照してください)。 Bruno Rochaは最近、xmltodict についてブログを書きました。

于 2013-08-22T22:44:40.500 に答える