题
如何克隆Element
在Python 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
elem
的parent
一个手柄,你可以调用
new_element = SubElement(parent, elem.tag, elem.attrib)
否则,你可能会想尝试
new_element = makeelement(elem.tag, elem.attrib)
,但这不是建议。
有关将来参考。
最简单的方法来复制一个节点(或树),并保持它的孩子,而无需进口的 ANOTHER 库的只有的为:
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
不隶属于 StackOverflow