Domanda
Come clone Element
oggetti in Python xml.etree
? Sto cercando di spostare e copiare procedurale (quindi modificare i loro attributi) nodi.
Soluzione
Si può semplicemente utilizzare copy.deepcopy () per fare una copia dell'elemento. (Questo lavoro sarà anche con lxml tra l'altro).
Altri suggerimenti
Un diverso, e un po 'inquietante soluzione:
new_element = lxml.etree.fromstring(lxml.etree.tostring(elem))
Almeno in Python 2.7 eTree elemento ha un metodo di copia: http://hg.python.org/cpython /file/2.7/Lib/xml/etree/ElementTree.py#l233
Si tratta di una copia, ma che è preferibile in alcuni casi.
Nel mio caso sto duplicando alcuni SVG Elements e l'aggiunta di una trasformazione. i bambini duplicazione non sarebbero di alcuna utilità in quanto, se del caso hanno già ereditare la loro madre di trasformare.
Se si dispone di una maniglia sul Element
del elem
parent
è possibile chiamare
new_element = SubElement(parent, elem.tag, elem.attrib)
In caso contrario, si potrebbe desiderare di provare
new_element = makeelement(elem.tag, elem.attrib)
, ma questo non è consigliato.
Per riferimento futuro.
Il modo più semplice per copiare un nodo (o albero) e tenerlo per bambini, senza dover importare ALTRO biblioteca solo per questo:
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