あなたが望むことを直接行う機能があるかどうかはわかりません。私は次のようにします: ノードを作成し、 のnew_parent
子a
をnew_parent
ノードに追加し、 に追加new_parent
しa
ます。
import lxml.etree
xml = '''<?xml version='1.0' encoding='ASCII'?>
<root>
<a>
<b>something</b>
<c>something different</c>
</a>
</root>'''
root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
for child in a:
parent.append(child)
a.append(parent)
print lxml.etree.tostring(root, xml_declaration=True)
印刷 (出力形式は読みやすいように変更されています)
<?xml version='1.0' encoding='ASCII'?>
<root>
<a>
<new_parent>
<b>something</b>
<c>something different</c>
</new_parent>
</a>
</root>
更新extend
の複数回の呼び出しの代わりに使用できますappend
。
root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
parent.extend(a)
a.append(parent)