python - 通过 Python (lxml) 在 xml 中更改父级

标签 python xml parsing lxml

您好,我正在使用 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_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)

关于python - 通过 Python (lxml) 在 xml 中更改父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070145/

相关文章:

python - 如何处理utf-8编码的String和BeautifulSoup?

python - 编译 gVim 支持 Python 3

html - 如何在 XML 中转义 & 符号,以便将它们呈现为 HTML 中的实体?

java - 将所有参数都放在 XML 文件中是否是优化的?

c++ - 解析器生成器的选择

python - 每小时对有间隙的时间序列数据重新采样

c# - Winform 设计器应用程序

json - 在 Swift 中从 OpenWeatherMap 解析 JSON

ios - 使用 AFNetworking 解析 JSON 时清空 UITableView

python - 使用 Python 从行列表中提取列