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))