2014-03-13 84 views
3

我有一個包含名稱相同的多個標籤,如下面的XML文檔:ElementTree的:尋找孩子無元素

<record> 
    <lang type="1">eng</lang> 
    <lang>fra</lang> 
</record> 

現在,如果我想找到1型元素,我可以使用

root.findall("./lang[@type='1']") 

但是,如果我只想找到沒有任何屬性的元素,比如第二個元素,該怎麼辦?顯然,我可以找到所有元素,然後執行如果檢查或嘗試,但有沒有更好的方法來做到這一點?

回答

4

ElementTree沒有實現完整XPath language,所以它缺少像布爾值,數字和字符串比較函數的東西。正如你已經意識到的那樣,你在這裏執行的是一個負面的屬性搜索,這對於ET的有限的XPath實現是不可能的。

爲ET的程序員依靠的Python的比較功能,通過Python的提供這些功能,如果檢查,的try /除外方法你已經提到。

2

遍歷整個樹,打印所有標籤和屬性。

for el in tree.iter(): 
    print el.tag, el.attrib 

迭代通過你的樹開始在record標籤,打印所有的標籤和屬性。

for el in tree.iter(tag='record'): 
    print el.tag, el.attrib 

迭代通過lang(多個)標籤。

for el in tree.iter(tag='lang'): 
    print el.tag, el.attrib 

我也看看Processing XML in Python with ElementTree。這應該可以幫助您找出解析XML節點的不同方法。