2017-01-25 11 views
0

XML文書を解析して、当社の人々が作成したすべての親資産を検索しようとしています。私が遭遇した問題は、すべての子供を排除することです。例えば特定の子を含まないXMLノードをリストする方法

<PAGE ID="ID0001.4"> 
</PAGE> 
<PAGE> 
</PAGE> 
<PAGE ID="ID0003.1"> 
    <PAGE> 
     <PAGE ID="ID0004"> 
      <PAGE ID="ID0007.8"> 
      </PAGE> 
     </PAGE> 
    </PAGE> 
</PAGE> 
<PAGE> 
    <PAGE> 
     <PAGE ID="ID0012.9"> 
      <PAGE ID="ID0009.2"> 
      </PAGE> 
     </PAGE> 
    </PAGE> 
</PAGE> 

以下のスニペットに私は.iterを使用して開始

"ID0001.4" 
"ID0003.1" 
"ID0012.9" 

なく

"ID0004" 
"ID0007.8" 
"ID0009.2" 

を返すようにしたいです。しかし、それは両親のリストを維持しません。だから私は、私は再帰的.findallを記述する必要があると仮定していますが、本当に私はよりエレガントな解決策があった期待していた... .iterを倍増し、が本当にが動作しない、子供を削除する

を試してみました見落としている。木がどのくらい深いか知る方法がないので、.findallの再帰が必要です。

答えて

-1

x='''<root><PAGE ID='ID0001.4'> 
</PAGE> 
<PAGE> 
</PAGE> 
<PAGE ID="ID0003.1"> 
<PAGE> 
    <PAGE ID="ID0004"> 
     <PAGE ID="ID0007.8"> 
     </PAGE> 
    </PAGE> 
</PAGE> 
</PAGE> 
<PAGE> 
<PAGE> 
    <PAGE ID="ID0012.9"> 
     <PAGE ID='ID0009.2'> 
     </PAGE> 
    </PAGE> 
</PAGE> 
</PAGE></root>''' 


import xml.etree.ElementTree as ET 
tree = ET.fromstring(x) 
for i in tree.iter('PAGE'): 
    if i.attrib;print i.attrib 

出力のpythonのElementTree XML APIを使用します。

{'ID': 'ID0001.4'} 
{'ID': 'ID0003.1'} 
{'ID': 'ID0004'} 
{'ID': 'ID0007.8'} 
{'ID': 'ID0012.9'} 
{'ID': 'ID0009.2'} 
+0

私の質問に答えていない、私は「 "ID0004" "ID0007.8" を返すようにしたくありませんID0009.2 " – Bart

関連する問題