2015-06-04 65 views
0

Morning All, 我一直在搜索每個地方,我正在意識到我可能沒有使用正確的搜索詞。基本上,我有下面的代碼片段,並且我想打印條目名稱的名稱值以及它是否可以找到'Trust'的成員值(true或false輸出會很好)。用Python(Etree)查找此XML中的某個成員

<entry name="Stuff"> 
    <to> 
     <member>1</member> 
     <member>2</member> 
     <member>3</member> 
     <member>Trust</member> 
    </to> 
</entry> 
<entry name="Stuff2"> 
    <to> 
     <member>1</member> 
     <member>2</member> 
     <member>3</member> 
     </to> 
</entry> 

我知道我可以訪問我的列表中的成員名稱值:

import xml.etree.cElementTree as ET 
tree = ET.ElementTree(file='configs/Stuff.xml') 

for each in tree.iterfind(): 
    print each.get('name') 
    print each.find('to').find('member').text 

我怎麼會是打印的所有值(條目名稱,值1,值2,等等),或如果存在,則爲true/false(條目名稱,True)?我發現很多一半的答案,但我似乎無法找到我的具體問題。

謝謝!

回答

0

將其封裝在函數中。

for each in tree.iter(): 
    print each.tag 
    if each.text == "Trust": 
     return True 
return False 
+0

我需要2個循環嗎?也許每個「入口」和每個「成員」一個? –

+0

我不這麼認爲(我認爲它遍歷樹中的所有成員),但每個xml解析只能有一個根標記。爲了加速它,你可能想要在它到達循環之前瀏覽樹: new_tree = tree.find(「to」) – John

0

這是結束了做什麼,我需要,我上面使用的代碼是示例代碼的代碼,我修改這個答案試圖解決的答案,但如果其他人試圖做類似這應該指向你正確的方向。

for each in tree.iterfind('entry'): 
for all in each.find('from').findall('member'): 
    print each.get('name')+';'+all.text 

這會打印每個成員的名稱和成員,我現在可以根據需要寫出或過濾。祝你好運。