使用python操作XML增删改查

时间:2022-10-20 22:18:23

使用python操作XML增删改查

什么是XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

参考文献

官方文档

导入模块

import xml.etree.ElementTree as ET

读取解析XML

可以从xml文件、字符串中解析
新建一个xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <students>
        <student>
            <name>张三</name>
            <age>18</age>
            <score>89</score>
        </student>
        <student>
            <name>李四</name>
            <age>19</age>
            <score>81</score>
        </student>
        <student>
            <name>王五</name>
            <age>17</age>
            <score>92</score>
        </student>
    </students>

从xml文件中读取,使用getroot()获取根节点,得到的是一个Element对象

tree = ET.parse('students.xml')
root = tree.getroot()

从字符串变量中读取,返回的是Element对象

root = ET.fromstring(country_data_as_string)

访问XML

每个Element都有以下属性

    #tag = element.text #访问Element标签
    #attrib = element.attrib #访问Element属性
    #text = element.text #访问Element文本

    for element in root.findall('student'):
        tag = element.tag #访问Element标签
        attrib = element.attrib #访问Element属性
        text = element.find('name').text #访问Element文本
        print(tag, attrib, text)

     print(root[0][0].text) #子节点是嵌套的,我们可以通关索引访问特定的子节点

查找元素

Element 提供了一些方法来帮助我们对他的子节点进行遍历

1、Element.iter()

    for student in root.iter('student'):
        print student[0].text
    out:
    张三
    李四
    王五

2、Element.findall()

    for element in root.findall('student'):
        name = element.find('name').text
        age = element.find('age').text
        score = element.find('score').text
        print name,age,score
    out:
    张三 18 89
    李四 19 81
    王五 17 92

修改XML

  • ElementTree.write()将构建的XML文档写入文件。
  • Element.text = '' 直接改变字段内容
  • Element.append(Element) 为当前的Elment对象添加子对象
  • Element.remove(Element) 删除Element节点
  • Element.set(key, value) 添加和修改属性
  • ElementTree.write('filename.xml') 写出(更新)XMl文件

创建XML

  • ElementTree.Element() 构建一个节点
  • ElementTree.SubElement(Element,tag) 构建一个子节点
    a = ET.Element('a')  
    b = ET.SubElement(a, 'b')  
    c = ET.SubElement(a, 'c')  
    print ET.dump(a)  
    out:
    &lt;a>&lt;b />&lt;c />&lt;/a>

总结

最近写东西需要都输出xml,所以学习了XML以及XML在python的使用。更多内容可以看官方文档。