xml - In Python ElementTree how can I get list of all ancestors of an element in tree? -


मुझे "get_ancestors_recursively" फ़ंक्शन की आवश्यकता है।
एक नमूना रन हो सकता है

  & gt ; & gt; & gt; डंप (tr) & lt; anc1 & gt; & LT; anc2 & gt; & LT; तत्व & gt; & Lt; / तत्व & gt; & Lt; / anc2 & gt; & Lt; / anc1 & gt; & Gt; & gt; & gt; Input_element = tr.getiterator ("तत्व") [0] & gt; & gt; & gt; क्या कोई मुझे इस के साथ मदद कर सकता है?   

ElementTree (v1.3 या बाद के संस्करण) के नवीनतम संस्करण में, आप बस

  इनपुट_element.find ('..') कर सकते हैं  

पुनरावर्ती रूप से हालांकि, पायथन के साथ जहाज़ वाले एलीमेंटट्री में यह कार्यक्षमता नहीं है, और मुझे एलिमेंट क्लास में कुछ दिखाई नहीं देता जो ऊपर दिखता है।

मेरा मानना ​​है कि इसका मतलब है कि आपको इसे कठिन तरीके से करना होगा: तत्व वृक्ष की एक संपूर्ण खोज के माध्यम से।

  def get_ancestors_recursively (ई, बी): "तत्व पेड़ ई में बी के पूर्वजों को ढूँढता है।" वापसी _get_ancestors_recursively (e.getroot (), बी, []) def _get_ancestors_recursively (एस, बी, एसी): "रिकर्सिव संस्करण। एसी अब तक पूर्वजों की निर्मित सूची है।" यदि s == b: रिटर्न एसी अन्य: s.getchildren () में बच्चे के लिए: newacc = एसीसी []: newacc.append (एस) res = _get_ancestors_recursively (child, b, newacc) अगर res नहीं है कोई नहीं: वापसी रिटर्न रिटर्न कोई भी  

यह डीएफएस की वजह से धीमा है, और कचरा संग्रह के लिए कई सूचियों को बाहर खींचता है, लेकिन अगर आप इससे निपट सकते हैं तो यह ठीक होना चाहिए।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -