简体   繁体   中英

Append on XML element using Python

I have xml named user_data.xml that contains:

<?xml version="1.0"?>
<users>
<user name="Rocky" id="1" age="38"/>
<user name="Steve" id="2" age="50"/>
<user name="Melinda" id="3" age="38"/>
</users>

and i want to add new element inside users something like:

<?xml version="1.0"?>
<users>
<user name="Rocky" id="1" age="38"/>
<user name="Steve" id="2" age="50"/>
<user name="Melinda" id="3" age="38"/>
<user name="Yondu" id="4" age="55"/>
</users>

and I've tried to do it using this python code:

class add_user:
        root_new  = ET.Element("users") 
    root_new.append((ET.fromstring('<user name="Yondu" id="4" age="55"/>')))
    tree = ET.ElementTree(root_new)
    tree.write(sys.stdout)
    for c in root_new:
        print(root_new)

but it's not working .

Any idea on how can I do it?

  1. Parse input XML file/content by etree.fromstring()
  2. Now you get object of root element.
  3. Then use etree.Element() method to create New User element.
  4. As our root element is users ie append new element to root element by append method.

Demo :

>>> from lxml import etree

>>> input_data = """<?xml version="1.0"?>
... <users>
... <user name="Rocky" id="1" age="38"/>
... <user name="Steve" id="2" age="50"/>
... <user name="Melinda" id="3" age="38"/>
... </users>"""

>>> root = etree.fromstring(input_data)

>>> new_user = etree.Element("user", {"name":"Yondu", "id":"4", "age": "55"})

>>> root.tag
'users'

>>> root.append(new_user)

>>> print etree.tostring(root, method="xml", pretty_print=True)
<users>
<user name="Rocky" id="1" age="38"/>
<user name="Steve" id="2" age="50"/>
<user name="Melinda" id="3" age="38"/>
<user age="55" name="Yondu" id="4"/></users>

>>> 

Note: Do necessary Exception handle.

lxml Documentation Link

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM