Python Lxml - 用新数据追加现有XML

8 投票
1 回答
8962 浏览
提问于 2025-04-16 03:45

我刚接触python和lxml。在浏览了lxml的网站并学习了python后,我还是找不到解决我这些新手问题的方法。我有下面这个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' )

谢谢大家!

1 个回答

17

你可以通过复制整个旧树来创建一个新树(不仅仅是根标签!),但直接在现有树上进行修改要简单得多(而且,为什么不呢?)…:

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>

(我希望这就是你想要的效果…?)

撰写回答