2012-05-02 56 views

Trả lời

11

Tất cả các phần tử con (cháu) của elem:

all_descendants = list(elem.iter()) 

Một hoàn chỉnh hơn ví dụ:

>>> import xml.etree.ElementTree as ET 
>>> a = ET.Element('a') 
>>> b = ET.SubElement(a, 'b') 
>>> c = ET.SubElement(a, 'c') 
>>> d = ET.SubElement(a, 'd') 
>>> e = ET.SubElement(b, 'e') 
>>> f = ET.SubElement(d, 'f') 
>>> g = ET.SubElement(d, 'g') 
>>> [elem.tag for elem in a.iter()] 
['a', 'b', 'e', 'c', 'd', 'f', 'g'] 

Để loại trừ các gốc tự:

>>> [elem.tag for elem in a.iter() if elem is not a] 
['b', 'e', 'c', 'd', 'f', 'g'] 
+1

Xin lỗi Eli, nhưng có lẽ tôi đã không làm cho bản thân mình hiểu, tôi chỉ muốn để có được tất cả các phần tử con , cũng không phải là gốc. tức là gốc không mong muốn ở đây. nhưng tôi nghĩ rằng phương pháp của bạn cũng chứa đối tượng gốc, phải không? – j5shi

+0

@Steven: xem cập nhật –

+1

Nhưng điều gì xảy ra nếu có nhiều hơn một sturct với thẻ 'a' được lồng trong phần tử 'a' và tôi muốn nhận tất cả các phần tử con của tất cả các cấu trúc 'a'? – j5shi

2

Nếu bạn muốn nhận tất cả các phần tử 'a', bạn có thể sử dụng:

a_lst = list(elem.iter('a')) 

Nếu số elem cũng là 'a', nó sẽ được bao gồm.

1

Không có câu trả lời hiện có nào sẽ tìm thấy tất cả trẻ em. Giải pháp này sử dụng BeautifulSoup thay vì ETree, nhưng sẽ tìm thấy tất cả trẻ em, thay vì chỉ cấp cao nhất:

from bs4 import BeautifulSoup  

with open(filename) as f: 
    soup = BeautifulSoup(f, 'xml') 

results = soup.find_all('element_name') 
Các vấn đề liên quan