Python Lxml - 使用新数据附加现有xml

Nat*_*son 7 python xml lxml

我是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>
-------------------------------
Run Code Online (Sandbox Code Playgroud)

我试图将一个子元素附加到根元素并将整个文件作为新的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' )
Run Code Online (Sandbox Code Playgroud)

TIA

Ale*_*lli 16

可以通过复制所有旧树(不仅仅是根标签! - )创建一个新树,但是就地编辑现有树(以及为什么不? - )更简单...:

tree = etree.parse('addressbook.xml')
root = tree.getroot()
NewSub = etree.SubElement ( root, 'CREATE_NEW_SUB' )
tree.write ( 'addressbook1.xml' )
Run Code Online (Sandbox Code Playgroud)

放入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>
Run Code Online (Sandbox Code Playgroud)

(我希望你正在寻找的效果......? - )

  • @Nathaniel,欢迎你!一旦你尝试了答案的建议,如果它运作良好并因此帮助了你,记得"接受"答案(通过点击答案左边的复选标记形图标) - 这是核心堆栈溢出礼仪! - ). (6认同)