使用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的使用。更多内容可以看官方文档。

使用python操作XML增删改查的更多相关文章

  1. 洗礼灵魂,修炼python(91)-- 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

    首先你得学会基本的mysql操作语句:mysql学习 其次,python要想操作mysql,靠python的内置模块是不行的,而如果通过os模块调用cmd命令虽然原理上是可以的,但是还是不太方便,那么 ...

  2. Linq To Xml操作XML增删改查

    对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...

  3. 4.Linq To Xml操作XML增删改查

    转自https://www.cnblogs.com/wujy/p/3366812.html 对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO X ...

  4. c#操作xml增删改查

    1.首先新建一个xml文件(Root是我写上的) 2. 3.直接上代码,更直观 (1)初始化xml /// <summary> /// 初始化xml /// </summary> ...

  5. Python列表的增删改查排嵌套特殊输出格式

    Python列表的增删改查排嵌套特殊输出格式 一.列表的样子: a = ['q' , 'w' , 'e ', 'r','t'] a为列表名,[ ]为列表内容,' '为列表内的元素,'q'为a[0] 二 ...

  6. js操作indexedDB增删改查示例

    js操作indexedDB增删改查示例 if ('indexedDB' in window) { // 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本 var r ...

  7. MySQL数据分析(16)— 数据操作之增删改查

    前面我们说学习MySQL要从三个层面,四大逻辑来学,三个层面就是库层面,表层面和数据层面对吧,数据库里放数据表,表里放数据是吧,大家可以回忆PPT中jacky的这图,我们已经学完了库层面和表层面,从本 ...

  8. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  9. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

随机推荐

  1. MySQL 分区建索引

    200 ? "200px" : this.width)!important;} --> 介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张 ...

  2. Ansible批量修改root密码

    0x01:首先做好免密登录 http://www.cnblogs.com/evlon/p/8094306.html 0x02:批量修改密码 ansible all -m raw -a "ec ...

  3. 【安富莱专题教程第1期】基于STM32的硬件RGB888接口实现emWin的快速刷新方案,32位色或24

    说明:1. 首先感谢ST终于推出了ARGB格式的emWin库,可谓千呼万唤始出来,使用STM32的硬件RGB888接口刷新图片慢的问题终于得到解决.2. 这个问题由来已久,是之前为我们的STM32-V ...

  4. 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试

    在多节点的项目中,经常要涉及到某些方法加锁的控制.而这个时候,简单易用的synchronized已经不能满足多节点的部署结构. 之前在项目中,用的比较多的是数据库的更新锁:for udpate.但是这 ...

  5. [Swift]LeetCode124. 二叉树中的最大路径和 | Binary Tree Maximum Path Sum

    Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any ...

  6. [Swift]LeetCode815. 公交路线 | Bus Routes

    We have a list of bus routes. Each routes[i]is a bus route that the i-th bus repeats forever. For ex ...

  7. [Swift]LeetCode864. 获取所有钥匙的最短路径 | Shortest Path to Get All Keys

    We are given a 2-dimensional grid. "." is an empty cell, "#" is a wall, "@& ...

  8. Netty:ChannelInitializer

    1. 作用 用于在某个Channel注册到EventLoop后,对这个Channel执行一些初始化操作.ChannelInitializer虽然会在一开始会被注册到Channel相关的pipeline ...

  9. Android studio的错误:radle sync failed: Cause: failed to find target android-21 :

    这个错误在Android studio中经常出现,特别是你在编译不同的app的时候,到底是什么原因会导致该错误产生呢? 首先看错误信息,是找不到目标android版本-21导致的,这就很明显了,你的目 ...

  10. linux配置jdk环境变量

    首先在Linux解压后缀为.tar.gz的jdk压缩文件 解压到当前的文件夹 tar -zcvf /root/java/jdk版本编号 指令: cd 目录路径     -> 是进入该目录路径 c ...