3

嗨,我正在使用 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>

可能吗 ?

4

1 回答 1

3

我不确定是否有一个功能可以直接执行您想要的操作。我会这样做:创建一个new_parent节点并将子节点附加anew_parent节点,然后附加new_parenta.

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)
于 2013-09-28T18:22:54.393 回答