xml.etree.ElementTree 将父标签附加到子标签

xml.etree.ElementTree append parent tag to child tag

我正在尝试使用 xml.etree.ElementTree 来解析 xml 字符串,查找特定标签,并通过附加父标签来包装子标签。

我的XML:

<a>
      <b>text1</b>
      <c>text2</c>

</a>

想要XML:

<a>
      <b>text1</b>
      <new_parent_tag_added>
         <c>text2</c>
      </new_parent_tag_added>
</a>

当前代码:

document_root = etree.ElementTree(etree.fromstring( XML_STRING))
root = document_root.find('a')
b = etree.SubElement(root, 'new_parent_tag_added')
c = etree.SubElement(b, 'c')

在上面的代码中,我如何保留现有标签 <c> 的值,以便它与我想要的 xml 匹配?

使用内置的 ElementTree 模块,你可以这样做(谢谢@mzjn):

c = root.find('c')
etree.SubElement(root, 'new_parent_tag_added').append(c)
root.remove(c)

有了lxml.etree它就短了一点:

etree.SubElement(root, 'new_parent_tag_added').append(root.find('c'))

无论如何,最好记住节点的行为类似于列表,因此您可以追加内容。