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>
我正在尝试从一个文件 (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>