【问题标题】:Python Lxml - Append a existing xml with new dataPython Lxml - 使用新数据附加现有 xml
【发布时间】:2010-09-06 02:22:56
【问题描述】:

我是 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

【问题讨论】:

  • 请注意,我编辑了您的 Q 以清晰地格式化代码和 XML - 在编写包含代码(或类似 XML)的 Q 时,突出显示这些块并单击看起来像在文本上方的图标行上的 0 和 1 小方块 - 这是实现格式设置的最简单方法(只需将整个块缩进四个空格并确保前后有空行是等效的 - 这就是顺便说一句,单击该图标对您有用;-)。
  • @Alex,谢谢,在这么短的时间内学到了这么多东西+1000 先生

标签: python xml lxml


【解决方案1】:

可以通过复制旧树的所有(不仅仅是根标记!-)来创建新树,但编辑现有树要简单得多就地(而且,为什么不呢?-)...:

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>

(我希望这是您正在寻找的效果...?-)

【讨论】:

  • 是的,就是这样! 敲桌子谢谢!
  • @Nathaniel,不客气!一旦您尝试了答案的建议,如果它运作良好并因此对您有所帮助,请记住“接受”答案(通过单击答案左侧的复选标记形图标) - 这是核心堆栈溢出礼仪! -)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2019-10-01
  • 2016-10-30
  • 2021-03-02
相关资源
最近更新 更多