पाइथन xml.etree
में Element
ऑब्जेक्ट्स कैसे क्लोन करें? मैं प्रक्रियात्मक रूप से स्थानांतरित करने और प्रतिलिपि बनाने (फिर उनके गुणों को संशोधित करने) की कोशिश कर रहा हूं।एट्री क्लोन नोड
उत्तर
आप तत्व की एक प्रति बनाने के लिए बस copy.deepcopy() का उपयोग कर सकते हैं। (यह वैसे भी एलएक्सएमएल के साथ काम करेगा)।
आप Element
elem
के parent
पर एक संभाल है, तो आप कॉल कर सकते हैं
new_element = SubElement(parent, elem.tag, elem.attrib)
नहीं तो आप
new_element = makeelement(elem.tag, elem.attrib)
की कोशिश करना चाहते हो सकता है, लेकिन यह सलाह नहीं दी है।
मुझे लगता है कि वे बच्चे नोड्स नकल नहीं है .. –
@SHiNKiROU आप 'id (old_element)' की तुलना 'id (new_element)' से कर सकते हैं यह देखने के लिए कि क्या यह वास्तव में स्मृति में एक अलग वस्तु बनाता है। क्या यह मदद करता है? –
@ मिंग-टैंग का उल्लेख है, यह ** ** बच्चों की प्रतिलिपि नहीं करता है। – halloleo
एक अलग, और कुछ हद तक परेशान समाधान:
new_element = lxml.etree.fromstring(lxml.etree.tostring(elem))
कम से कम अजगर में 2.7 etree तत्व एक प्रति विधि है: http://hg.python.org/cpython/file/2.7/Lib/xml/etree/ElementTree.py#l233
यह एक उथले प्रतिलिपि है, लेकिन कुछ मामलों में बेहतर है ।
मेरे मामले में मैं कुछ एसवीजी तत्वों को डुप्लिकेट कर रहा हूं और एक रूपांतरण जोड़ रहा हूं। बच्चों को डुप्लिकेट करना किसी भी उद्देश्य की सेवा नहीं करेगा क्योंकि जहां से वे अपने माता-पिता के परिवर्तन को पहले ही प्राप्त कर चुके हैं।
भविष्य में * xml.etree.ElementTree * * lxml.etree * के साथ * xml.etree.ElementTree * को बदलने के बारे में सोचने के लिए, ध्यान दें कि 'Element.copy() 'मौजूद नहीं है * lxml.etree * में, और 'copy.copy()' बच्चों को प्रतिलिपि बनाता है, जब 'lxml.etree.Element' पर लागू होता है। – meowsqueak
या तो CElementTree (पायथन 2.7) के साथ काम नहीं करता है। तो कोड evolutivity के लिए copy.copy() (उथले प्रतिलिपि) या copy.deepcopy() पसंद करते हैं। – Thierry
भविष्य के संदर्भ के लिए।
सबसे आसान तरीका एक नोड (या पेड़) को कॉपी करें और रखने के लिए बच्चों को है, आयात करने के लिए एक और पुस्तकालय केवल उस के लिए बिना:
def copy_tree(tree_root):
return et.ElementTree(tree_root);
duplicated_node_tree = copy_tree (node); # type(duplicated_node_tree) is ElementTree
duplicated_tree_root_element = new_tree.getroot(); # type(duplicated_tree_root_element) is Element
स्पष्ट होने के लिए, यह एक गहरी प्रति नहीं है। (हां, पोस्ट कहता है "और अपने बच्चों को रखो," लेकिन मुझे अभी भी इसका मतलब परीक्षण करने की आवश्यकता महसूस हुई।) – harpo
- 1. एलएक्सएमएल के एट्री
- 2. क्लोन नोड कस्टम गुणों को क्यों बहिष्कृत करता है?
- 3. एक्सएमएल पार्सिंग: एलिमेंट ट्री (एट्री) बनाम मिनीडॉम
- 4. क्लोन नोड मूल नोड के बराबर नहीं है (isEqualNode के साथ)
- 5. नोड
- 6. नोड
- 7. नोड
- 8. नोड
- 9. नोड
- 10. नोड
- 11. Farmville क्लोन
- 12. क्लोन तत्व
- 13. Minecraft क्लोन
- 14. गिट क्लोन
- 15. क्लोन() विधि
- 16. जीआईटी - क्लोन
- 17. किसी दस्तावेज़ को जोड़ते समय क्लोन नोड का उपयोग क्यों किया जाना चाहिए?
- 18. जेनकींस - गुलाम नोड से क्लोन गिट करने में असमर्थ। एसएसएच कुंजी
- 19. एचटीएमएल एजिलिटी पैक, नोड से चयन नोड
- 20. निर्दिष्ट नोड के बाद भाई नोड पाएं
- 21. एक्सेस एलिमेंट ट्री नोड पेरेंट नोड
- 22. xPath/HTML: नोड का चयन संबंधित नोड
- 23. दूरस्थ एसएसएच भंडार से गिट क्लोन - क्लोन कमांड
- 24. क्लोन() ऑब्जेक्ट को क्लोन करने का क्या अर्थ है?
- 25. क्लोन() एक तत्व एन बार कैसे क्लोन करें?
- 26. Hgsubversion SVN क्लोन को
- 27. क्लोन गिट रिपॉजिटरी
- 28. jQuery क्लोन समस्या
- 29. क्लोन विनफॉर्म नियंत्रण
- 30. क्लोन/पुश/पुल
यह एक प्रति बनाता है, लेकिन यह पेड़ में नहीं जोड़ा गया है। ऐसा करने के लिए आपको 'संलग्न() 'या' insert() 'करना होगा। –
यह सीलेमेंट ट्री के साथ भी काम करता है ;-) – Thierry