【问题标题】:How do I append new data to existing XML using Python ElementTree?如何使用 Python ElementTree 将新数据附加到现有 XML?
【发布时间】:2025-12-14 08:40:02
【问题描述】:

我是 Python 新手/ElementTree。我有以下 XML 示例:

<users>
    <user username="admin" fullname="admin" password=""  uid="1000"/>
    <user username="user1" fullname="user1" password="" grant_admin_rights="yes"><group>my_group</group><group>group_2</group></user>
</users>

我想将以下内容追加到这个现有的 XML:

<user username="+username+" password="+password+"><group>+newgroup+</group></user>

所以我的最终输出应该是这样的:

    <users>
        <user username="admin" fullname="admin" password=""  uid="1000"/>
        <user username="user1" fullname="user1" password="" grant_admin_rights="yes"><group>my_group</group><group>group_2</group></user>
        <user username="+username+" password="+password+"><group>+newgroup+</group></user>
    </users>

这是我的尝试:

import sys
import xml.etree.ElementTree as ET

class Users(object):
    def __init__(self, users=None):
        self.doc = ET.parse("users.xml")
        self.root = self.doc.getroot()

    def final_xml(self):
        root_new  = ET.Element("users") 
        for child in self.root:
            username             = child.attrib['username']
            password             = child.attrib['password']  
            user    = ET.SubElement(root_new, "user") 
            user.set("username",username)               
            user.set("password",password) 
            try:
                fullname             = child.attrib['fullname']
            except KeyError:
                pass
            for g in child.findall("group"):
                group     = ET.SubElement(user,"group")
                group.text = g.text
        tree = ET.ElementTree(root_new)
        tree.write(sys.stdout)

【问题讨论】:

  • 那么这段代码在哪里尝试添加新的&lt;user&gt;?在我看来,您并没有尝试按照您的要求去做。

标签: python elementtree


【解决方案1】:

在 ElementTree 中,Element 对象有一个“追加”方法。使用此方法可以直接添加新的 XML 标签。

例如:

user = Element('user')
user.append((Element.fromstring('<user username="admin" fullname="admin" password="xx"  uid="1000"/>')))

“元素”来自from xml.etree.ElementTree import Element

【讨论】:

    【解决方案2】:

    在获得 XML 根之后,将该根的子节点转换为字符串 - “ET.toString()”,并将“.split()” 分割成片段,这样您就可以创建一个列表,并附加新的行到该列表。然后使用“.join()”从列表中创建一个字符串。之后,使用“ET.fromString()”方法创建一个新的 xml。并将其写入文件。

    【讨论】:

      最近更新 更多