tutorial parse from etree datacamp python xml.etree

python - parse - etree clone nodo



xml etree python 3 (5)

Al menos en Python 2.7 etree Element tiene un método de copia: http://hg.python.org/cpython/file/2.7/Lib/xml/etree/ElementTree.py#l233

Es una copia superficial, pero eso es preferible en algunos casos.

En mi caso estoy duplicando algunos elementos SVG y agregando una transformación. Duplicar a los hijos no serviría para nada ya que, cuando son relevantes, ya heredan la transformación de sus padres.

¿Cómo clonar objetos Element en Python xml.etree ? Estoy tratando de mover y copiar (a continuación, modificar sus atributos) los nodos.


Para futura referencia.

La forma más sencilla de copiar un nodo (o árbol) y mantener sus hijos, sin tener que importar OTRA biblioteca SOLAMENTE para eso:

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


Si tiene control sobre el parent del Element , puede llamar al

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

De lo contrario es posible que desee probar

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

Pero esto no es aconsejable.


Solo puede usar copy.deepcopy() para hacer una copia del elemento. (Esto también funcionará con lxml por cierto).


Una solución diferente y algo inquietante:

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