Domanda

Come clone Element oggetti in Python xml.etree? Sto cercando di spostare e copiare procedurale (quindi modificare i loro attributi) nodi.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top