2012-12-01 33 views
4

我是Python新手/ ElementTree。我有以下XML示例:如何使用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) 
+0

那么这段代码试图添加新的''?不要像我一样试图去做你所问的事情。 – martineau

回答

11

在ElementTree中,Element对象有一个“append”方法。通过使用这种方法,您可以直接添加新的XML标签。

例如:

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

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

-4

获取XML根后,将其根目录的子项转换为字符串 - “ET.toString()”和“.split()”为片段,以便可以创建列表并追加新的行到该列表。然后使用“.join()”从列表中创建一个字符串。之后,使用“ET.fromString()”方法创建一个新的xml。并将其写入文件。

相关问题