4

私は 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)
4

2 に答える 2

12

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.

于 2012-12-01T08:20:56.277 に答える
-5

XMLルートを取得した後、そのルートの子を文字列に変換します-「ET.toString()」、および「.split()」をピースに変換して、リストを作成し、それに新しい行を追加できるようにしますリスト。次に、「.join()」を使用して、リストから文字列を作成します。その後、「ET.fromString()」メソッドを使用して新しいxmlを作成します。そして、それをファイルに書き込みます。

于 2012-12-01T08:11:15.487 に答える