嗨,我正在使用 lxml 解析和完全修改 Python3 中的 XML 文件,我需要将新元素放入现有元素并更改它们的父元素。
示例:旧 xml
<a>
<b>something</b>
<c>something different</c>
</a>
新的 xml
<a>
<new_parent>
<b>something</b>
<c>something different</c>
</new_parent>
<a>
可能吗 ?
我不确定是否有一个功能可以直接执行您想要的操作。我会这样做:创建一个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)