سؤال

كيفية استنساخ Element الأشياء في بيثون xml.etree؟ أحاول نقل العقد ونسخها (ثم تعديل سماتها).

هل كانت مفيدة؟

المحلول

يمكنك فقط استخدام copy.deepcopy () لعمل نسخة من العنصر. (سيعمل هذا أيضًا مع LXML).

نصائح أخرى

حل مختلف ومقلق إلى حد ما:

new_element = lxml.etree.fromstring(lxml.etree.tostring(elem))

على الأقل في عنصر Python 2.7 Etree لديه طريقة نسخ:http://hg.python.org/cpython/file/2.7/lib/xml/etree/elementtree.py#l233

إنها نسخة ضحلة ، لكن هذا هو الأفضل في بعض الحالات.

في حالتي ، أقوم بتكرار بعض عناصر SVG وإضافة تحويل. إن تكرار الأطفال لن يخدموا أي غرض لأنهم يرثون بالفعل تحويل والديهم.

إذا كان لديك مقبض على Element elemparent تستطيع الاتصال

new_element = SubElement(parent, elem.tag, elem.attrib)

وإلا فقد ترغب في المحاولة

new_element = makeelement(elem.tag, elem.attrib)

ولكن هذا لا ينصح.

للرجوع إليها في المستقبل.

أبسط طريقة لنسخ عقدة (أو شجرة) والحفاظ على أطفالها ، دون الحاجة إلى الاستيراد اخر مكتبة فقط من أجل هذا:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top