Python Lxml - добавить существующий XML с новыми данными - PullRequest
7 голосов
/ 06 сентября 2010

Я новичок в python / lxml. Прочитав сайт lxml и погрузившись в python, я не смог найти решение своих проблем с n00b.У меня есть следующий пример xml:

---------------
<addressbook>
    <person>
        <name>Eric Idle</name>
        <phone type='fix'>999-999-999</phone>
        <phone type='mobile'>555-555-555</phone>
        <address>
            <street>12, spam road</street>
            <city>London</city>
            <zip>H4B 1X3</zip>
        </address>
    </person>
</addressbook>
-------------------------------

Я пытаюсь добавить одного дочернего элемента к корневому элементу и записать весь файл обратно как новый xml или перезаписать существующий xml.В настоящее время я пишу только одну строку.

from lxml import etree
tree = etree.parse('addressbook.xml')
root = tree.getroot()
oSetroot = etree.Element(root.tag)
NewSub = etree.SubElement ( oSetroot, 'CREATE_NEW_SUB' )
doc = etree.ElementTree (oSetroot)
doc.write ( 'addressbook1.xml' )

TIA

1 Ответ

16 голосов
/ 06 сентября 2010

Вы могли бы создать новое дерево, скопировав более всех старого (не только корневой тег! -), но гораздо проще редактировать существующее дерево вместо (и, почему бы и нет? -) ...:

tree = etree.parse('addressbook.xml')
root = tree.getroot()
NewSub = etree.SubElement ( root, 'CREATE_NEW_SUB' )
tree.write ( 'addressbook1.xml' )

, которое вставляет addressbook1.xml:

<addressbook>
    <person>
        <name>Eric Idle</name>
        <phone type="fix">999-999-999</phone>
        <phone type="mobile">555-555-555</phone>
        <address>
            <street>12, spam road</street>
            <city>London</city>
            <zip>H4B 1X3</zip>
        </address>
    </person>
<CREATE_NEW_SUB /></addressbook>

(который, я надеюсь, является эффектом, который вы ищете... -?)

...