2013-03-22 114 views
16

我解析在python通過元素樹一個XML文件,並寫入內容到CPP文件。如何在解析之前檢查XML中是否存在屬性和標記?

兒童標籤的內容將是不同的標籤變種。例如,第一個事件標記具有派對標記作爲子項,但第二個事件標記沒有。

- >我如何檢查不能解析之前標籤是否存在?

- >兒童在1日的事件標籤值屬性,但不是在第二位。在獲取它的價值之前,如何檢查屬性是否存在。

- >目前我的代碼會因不存在的第三方代碼錯誤,併爲第二兒童標籤的「無」屬性值。

<main> 
    <event> 
    <party>Big</party> 
    <children type="me" value="3"/> 
    </event> 

    <event> 
    <children type="me"/> 
    </event> 

</main> 

代碼:

import xml.etree.ElementTree as ET 
tree = ET.parse('party.xml') 
root = tree.getroot() 
for event in root.findall('event'): 
    parties = event.find('party').text 
    children = event.get('value') 

我要檢查標籤,然後把他們的價值觀。

回答

40

如果標籤不存在,.find()確實返回None。只要該值測試:

for event in root.findall('event'): 
    party = event.find('party') 
    if party is None: 
     continue 
    parties = party.text 
    children = event.get('value') 

你已經使用.get()事件,以測試value屬性;如果該屬性不存在,它也會返回None

屬性存儲在.attrib字典,所以你可以使用標準的Python技術測試的屬性明確過:如果一方是無

if 'value' in event.attrib: 
    # value attribute is present. 
+0

@Martjin皮特斯你提到:我如何在Python寫的,如果我希望寫一些像 - 如果派對!=無: – Abhishek 2013-03-22 13:41:33

+4

@Ahhishek:'如果派對不是無'。參見[python比較運算符](http://docs.python.org/2/reference/expressions.html#not-in)。 – 2013-03-22 13:53:45

+0

謝謝你還提到如何檢查屬性。非常好的答案。 – SSchneid 2016-09-20 07:18:58