xml处理模块

假如有下面这样简单的xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <person name="LiPanHui">
        <age>28</age>
        <sex>man</sex>
        <like name="WuTao"/>
    </person>
    <person name="XuQianHua">
        <age>30</age>
        <sex>man</sex>
        <like name="ChenWeiMeng"/>
    </person>
</data>

读文档的内容

>>> import xml.etree.ElementTree as ET                                                                                  
>>> tree = ET.parse("test.xml")
>>> root = tree.getroot()
>>> print(root.tag)
data

>>> for child in root: # 遍历xml文档
... print(child.tag, child.attrib)
... for i in child:
... print(i.tag, i.text)
...
person {'name': 'LiPanHui'}
age 28
sex man
like None
person {'name': 'XuQianHua'}
age 30
sex man
like None

>>> for node in root.iter('age'): # 只遍历age节点
... print(node.tag, node.text)
...
age 28
age 30

修改和删除xml文档的内容

# 修改
>>> tree = ET.parse("test.xml")                                                                                         
>>> root = tree.getroot()
>>> for node in root.iter('age'):
... new_age = int(node.text) + 1
... node.text = str(new_age)
... node.set('updated', 'yes')
...
>>> tree
<xml.etree.ElementTree.ElementTree object at 0x000001B5F29BCD68>
>>> tree.write('test2.xml')

新生成了文件test2.xml

<data>
    <person name="LiPanHui">
        <age updated="yes">29</age>
        <sex>man</sex>
        <like name="WuTao" />
    </person>
    <person name="XuQianHua">
        <age updated="yes">31</age>
        <sex>man</sex>
        <like name="ChenWeiMeng" />
    </person>
</data>
# 删除
>>> tree = ET.parse("test.xml") >>> root = tree.getroot() >>> for person in root.findall('person'): ... age = int(person.find('age').text) ... if age < 29: ... root.remove(person) ... >>> tree.write("test.xml")

文件test.xml被修改成:

<data>
    <person name="XuQianHua">
        <age>30</age>
        <sex>man</sex>
        <like name="ChenWeiMeng" />
    </person>
</data>

新增xml文件

>>> new_xml = ET.Element("hobbies")
>>> name = ET.SubElement(new_xml, "singing", attrib={'very_like': 'yes'})
>>> is_usually = ET.SubElement(name, "is_usually")
>>> is_usually.text = 'yes'
>>> name2 = ET.SubElement(new_xml, "play_game", attrib={'very_like': 'no'})
>>> is_usually = ET.SubElement(name2, "is_usually")
>>> is_usually.text = 'no'
>>> et = ET.ElementTree(new_xml)
>>> et.write("test.xml", encoding="utf-8", xml_declaration=True)
>>> ET.dump(new_xml)# 打印生成的内容
<hobbies><singing very_like="yes"><is_usually>yes</is_usually></singing><play_game very_like="no"><is_usually>no</is_usually></play_game></hobbies>

生成的内容:

<?xml version='1.0' encoding='utf-8'?>
<hobbies>
    <singing very_like="yes">
        <is_usually>yes</is_usually>
    </singing>
    <play_game very_like="no">
        <is_usually>no</is_usually>
    </play_game>
</hobbies>
原文地址:https://www.cnblogs.com/allenzhang-920/p/9180608.html