2017-01-25 86 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> 

我想回到

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

,而不是

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

我開始使用.iter。但是這並不包含父母的名單。於是,我就加倍.iter和去除,真的沒有工作的兒童...

我假設我需要寫一個遞歸.findall,但真的很希望有一個更優雅的解決方案,我遠眺。遞歸.findall將是必要的,因爲我無法知道樹有多深。

回答

-1

使用Python的ElementTree XML API

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 

輸出:

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

那並沒有回答我的問題,我不想回到 「ID0004」 「ID0007.8」 「 ID0009.2" – Bart

相關問題