lxml: как создать новое дерево элементов из заданного элемента в дереве - PullRequest
1 голос
/ 11 марта 2011

Я использую lxml для анализа XML-данных.Я должен разделить xml на разных узлах и записать данные в каждое из этих поддеревьев в отдельные файлы.lxml предоставляет метод write () в классе _ElementTree, который удобно записывает xml, представленный деревом разбора, в файл.

Так что, если я могу создать дерево (объект _ElementTree) корневым узлом поддерева данногоузел, то я могу легко использовать метод write ().Как это сделать.

Ответы [ 2 ]

6 голосов
/ 11 марта 2011

Извините, что беспокою, я нашел ответ.Его:

new_tree = etree.ElementTree(node_in_tree)
4 голосов
/ 11 марта 2011

Вам не нужно создавать новое ElementTree для записи элемента и его содержимого в файл, вы можете просто записать результат etree.tostring(element), например:

from lxml import etree

with open("whatever.xml") as fp:
    tree = etree.parse(fp)
    i = 0
    for node in tree.xpath('//section'):
        output_filename = "output-%d.xml" % (i,)
        with open(output_filename,"w") as fp:
            fp.write(etree.tostring(node))
        i += 1
...