LXML 添加一个元素到根

LXML add an element into root

我正在尝试从一个文件 (file1.xml) 中取出两个元素,并将它们写入另一个文件 (file2.xml) 的末尾。我可以让它们打印出来,但我无法尝试将它们写到 file2.xml 上!求助!

filename = "file1.xml"
appendtoxml = "file2.xml"
output_file = appendtoxml.replace('.xml', '') + "_editedbyed.xml"
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(filename, parser)
etree.tostring(tree)
root = tree.getroot()


a = root.findall(".//Device")
b = root.findall(".//Speaker")



for r in a:
    print etree.tostring(r)
for e in b:
    print etree.tostring(e)

NewSub = etree.SubElement (root, "Audio(just writes audio..")
print NewSub

我想将 a、b 的结果添加到根中 outputfile.xml 的末尾。

  • 同时解析输入文件和您要附加到的文件。
  • 使用 root.append(elt) 将元素 elt 附加到 root
  • 然后使用tree.write将新树写入文件(例如appendtoxml):

注意:上面的链接指向标准中 xml.etree 的文档 图书馆。由于 lxml 的 API 试图与标准库的兼容 xml.etree,标准库文档也适用于 lxml(位于 至少对于这些方法)。有关位置的信息,请参阅 http://lxml.de/api.html API 不同。


import lxml.etree as ET
filename = "file1.xml"
appendtoxml = "file2.xml"
output_file = appendtoxml.replace('.xml', '') + "_editedbyed.xml"

parser = ET.XMLParser(remove_blank_text=True)
tree = ET.parse(filename, parser)
root = tree.getroot()

out_tree = ET.parse(appendtoxml, parser)
out_root = out_tree.getroot()
for path in [".//Device", ".//Speaker"]:
    for elt in root.findall(path):
        out_root.append(elt)

out_tree.write(output_file, pretty_print=True)

如果file1.xml包含

<?xml version="1.0"?>
<root>
<Speaker>boozhoo</Speaker>
<Device>waaboo</Device>
<Speaker>anin</Speaker>
<Device>gigiwishimowin</Device>
</root>

file2.xml包含

<?xml version="1.0"?>
<root>
<Speaker>jubal</Speaker>
<Device>crane</Device>
</root>

然后 file2_editedbyed.xml 将包含

<root>
  <Speaker>jubal</Speaker>
  <Device>crane</Device>
  <Device>waaboo</Device>
  <Device>gigiwishimowin</Device>
  <Speaker>boozhoo</Speaker>
  <Speaker>anin</Speaker>
</root>