2012-05-02 5 views
9

मैं तत्व तत्व पेड़ के सभी उप-तत्वों को प्राप्त करने का तरीका ढूंढना चाहता हूं जैसे ElementTree.getchildren() करता है, क्योंकि पाइथन संस्करण 2.7 के बाद getchildren() को बहिष्कृत किया गया है, मैं अब इसका उपयोग नहीं करना चाहता, हालांकि मैं अभी भी इसका उपयोग कर सकता हूं।पायथन ElementTree के साथ तत्व पेड़ के सभी उप-तत्व कैसे प्राप्त करें?

धन्यवाद।

उत्तर

11

सभी उप तत्वों elem की (वंश):

all_descendants = list(elem.iter()) 

एक और पूरी उदाहरण:

>>> 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'] 

जड़ ही निकालने के लिए:

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

क्षमा एली, लेकिन शायद मैं अपने आप को समझ में आ नहीं किया, मैं सिर्फ सभी उप-तत्व प्राप्त करना चाहते हैं जड़ भी नहीं। यानी जड़ यहां अवांछित है। लेकिन मुझे लगता है कि आपकी विधि में रूट ऑब्जेक्ट भी है, है ना? – j5shi

+0

@Steven: अद्यतन –

+1

देखें, लेकिन अगर तत्व 'ए' में घोंसला वाले टैग 'ए' के ​​साथ एक से अधिक स्टर्क्ट हैं और मैं सभी 'ए' structs के सभी उप-तत्व प्राप्त करना चाहता हूं? – j5shi

2

आप चाहते हैं सभी तत्व 'ए' प्राप्त करें, आप इसका उपयोग कर सकते हैं:

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

यदि elem भी 'ए' है, तो इसमें शामिल किया जाएगा।

1

मौजूदा उत्तरों में से कोई भी सभी बच्चों को नहीं मिलेगा। यह समाधान ETree के बजाय BeautifulSoup का उपयोग करता है, लेकिन सभी बच्चों को मिलेगा, बस शीर्ष स्तर के बजाय:

from bs4 import BeautifulSoup  

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

results = soup.find_all('element_name') 
संबंधित मुद्दे