2010-05-14 3 views
29

Я использую lxml для создания XML-файла с нуля; имеющие такой код:Запись XML-файла с использованием библиотеки lxml в Python

from lxml import etree 

root = etree.Element("root") 
root.set("interesting", "somewhat") 
child1 = etree.SubElement(root, "test") 

Как написать корень Element объекта в файл XML с помощью write() метода ElementTree класса?

ответ

48

Вы можете получить строку из элемента, а затем написать, что из lxml tutorial

str = etree.tostring(root, pretty_print=True) 

или преобразовать в элемент дерева

et = etree.ElementTree(root) 
et.write(sys.stdout, pretty_print=True) 
+2

И 'write' также принимает аргумент' pretty_print = True' http://lxml.de/tutorial.html – juanmirocks

+2

, когда вы пишете 'str', убедитесь, что вы записываете в двоичном режиме' b': 'с открытым (' pretty.html ',' wb ') в качестве файла: file.write (str) ' – laviex

+0

Начиная с python3 вам нужно использовать' sys.stdout.buffer' вместо 'sys.stdout' - это по сути то же самое, что и @laviex указал, только для частного случая 'sys.stdout'. – kdb

0

Вы можете попробовать следующий код.

from lxml import etree as ET 

root = ET.Element('Doc') 
level1 = ET.SubElement(root, 'S') 
main = ET.SubElement(level1, 'Text') 
main.text = 'Thanks for contributing an answer to Stack Overflow!' 
second = ET.SubElement(level1, 'Tokens') 
level2 = ET.SubElement(second, 'Token', word=u"low") 


level3 = ET.SubElement(level2, 'Morph') 
second1 = ET.SubElement(level3, 'Lemma') 
second1.text = 'sdfs' 
second1 = ET.SubElement(level3, 'info') 
second1.text = 'qw' 

level4 = ET.SubElement(level3, 'Aff') 
second1 = ET.SubElement(level4, 'Type') 
second1.text = 'sdfs' 
second1 = ET.SubElement(level4, 'Suf') 
second1.text = 'qw' 

tree = ET.ElementTree(root) 
tree.write('output.xml', pretty_print=True, xml_declaration=True, encoding="utf-8") 
0

Вот краткий ответ

from lxml import etree 

root = etree.Element("root") 
root.set("interesting", "somewhat") 
child1 = etree.SubElement(root, "test") 

my_tree = etree.ElementTree(root) 
with open('./filename', 'wb') as f: 
    f.write(etree.tostring(my_tree)) 

вы просто поместите узел в новое дерево и написать, что на диск. Также работает для HtmlElements, созданного поисками xpath.