2015-09-22 5 views
0

Im пытается взять два элемента из одного файла (file1.xml) и записать их в конец другого файла (file2.xml). Я могу заставить их распечатать, но я застрял, пытаясь записать их на file2.xml! Помогите !LXML добавить элемент в корень

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 в корне.

ответ

1
  • Проанализируйте как файл ввода, так и файл, к которому вы хотите добавить.
  • Использование root.append(elt) для добавления элемента, elt, к root.
  • Затем используйте tree.write, чтобы записать новое дерево в файл (например, appendtoxml):

Примечание: ссылки выше точки к документации для xml.etree из стандартной библиотеки . Поскольку API lxml пытается быть совместимым со стандартной библиотекой 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> 
+0

Это работало безупречно. Лучший ответ, который я получил через некоторое время. * Аплодисменты * – Anekdotin

+0

Большое вам спасибо – Anekdotin

Смежные вопросы