模块XML的特点和用法

一、简介

  xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

二、特点

xml的格式如下,就是通过<>节点来区别数据结构的:

 <duoduo>#这里面的内容可以换
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country> #观察可以发现实际上和字典的特性差不多
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</duoduo>

三、XML的用法

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml 

1、查询xml文档内容

 import xml.etree.ElementTree as ET

 tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root) #获取根节点,也就是内存地址
print(root.tag) #根的名字 # 遍历xml文档
for country in root:
print(country.tag, country.attrib) #分别打印子节点名称和子节点属性
for i in country: #遍历子节点下的所有节点
print(i.tag, i.text,i.attrib) #打印子节点下节点的节点名,节点值,节点值的属性
# 只遍历year节点
for i in country.iter("year"):
print("\t", i.tag, i.attrib, i.text) # 只遍历year 节点
for node in root.iter('year'):
print(node.tag, node.text) #打印year的节点名和节点值

重点:

  1、tag是返回节点名,attrib返回节点属性,text返回节点值

  2、返回根节点用getroot()方法

  3、只遍历某个节点,只需要用iter(节点名)方法

  4、遍历找不到要找的只能继续往下遍历

2、修改xml文档内容

 import xml.etree.ElementTree as et

 tree = et.parse("xmltest.xml")
root = tree.getroot() #修改year节点的值
for node in root.iter("year"):
new_year = int(node.text) + 1 #修改节点值
node.text = str(new_year) #修改后强制转换成字符串类型
node.tag = "newyear" #修改节点名
node.set("duoduo",'') #修改节点属性 tree.write("xmltest1.xml") #修改完成后,重新写入xml文件(可以是任何文件,包括原来的)

重点:

  可以修改xml文件中的任何内容,包括本身的节点名,修改后一定要有写入xml文件的操作。

3、删除xml文档内容

 import xml.etree.ElementTree as et

 tree = et.parse("xmltest.xml")
root = tree.getroot() #删除
for country in root.findall("country"): #找到第一层子节点(“具体对象”)
rank = int(country.find("rank").text) #找到子节点下的(“rank”)节点的节点值
if rank > 50:
root.remove(country) #删除子节点 tree.write("xmltest1.xml") #重新写入xml文件

重点:

  1、root.findall()从根节点只能根据第一层的子节点名查找,并且返回第一层子节点的内存地址,前面root定义什么区域,就查找什么区域

  2、删除子节点用remove()方法

  3、删除以后,一定要做重新写入新的xml文件操作

4、创建新的xml文件

 import xml.etree.ElementTree as et

 new_xml = et.Element("namelist")   #创建根节点

 #创建第一层子节点,后面参数依次是:父节点,子节点,子节点属性
name = et.SubElement(new_xml,"name",attrib={"duoduo":"handsome"})
#创建第二层子节点
age = et.SubElement(name,"age",attrib={"check":"yes"})
#设置第二层节点值
age.text = ''
sex = et.SubElement(name,"sex")
sex.text = "man"
#创建另外一个第一层子节点
name2 = et.SubElement(new_xml,"name",attrib={"qianduoduo":"haoshuai"})
#创建其第二层子节点
age = et.SubElement(name2,"age")
age.text = '' ET = et.ElementTree(new_xml) #生成新的xml文档
ET.write("test.xml",encoding="utf-8",xml_declaration=True) #在新xml文件的开头自动添加:<?xml version='1.0' encoding='utf-8'?> et.dump(new_xml) #在屏幕上打印生成的格式

重点:pycharm创建的xml直接就是一行,没有格式.

  

小白的Python之路 day5 模块XML特点和用法的更多相关文章

  1. 小白的Python之路 day5 configparser模块的特点和用法

    configparser模块的特点和用法 一.概述 主要用于生成和修改常见配置文件,当前模块的名称在 python 3.x 版本中变更为 configparser.在python2.x版本中为Conf ...

  2. 小白的Python之路 day5 hashlib模块

    hashlib模块 一.概述 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 二.算法的演 ...

  3. 小白的Python之路 day5 logging模块

    logging模块的特点及用法 一.概述 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你 ...

  4. 小白的Python之路 day5 python模块详解及import本质

    一.定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上组织模块 ...

  5. 小白的Python之路 day5 time,datatime模块详解

    一.模块的分类 可以分成三大类: 1.标准库 2.开源模块 3.自定义模块 二.标准库模块详解 1.time与datetime 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时 ...

  6. 小白的Python之路 day5 random模块和string模块详解

    random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ...

  7. 小白的Python之路 day5 shelve模块讲解

    shelve模块讲解 一.概述 之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,有什么方法可以向dump多少次就dump多少次,并且load不会出 ...

  8. 小白的Python之路 day5 re正则模块

    re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...

  9. 小白的Python之路 day5 os,sys模块详解

    os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...

随机推荐

  1. 查看内存和cpu

    top: 主要参数 d:指定更新的间隔,以秒计算. q:没有任何延迟的更新.如果使用者有超级用户,则top命令将会以最高的优先序执行. c:显示进程完整的路径与名称. S:累积模式,会将己完成或消失的 ...

  2. Yum database disk image is malformed

    使用 yum update 时使用Ctrl+C 后,再用yum 安装其他软件的时候收到:Yum database disk image is malformedyum clean dbcache 清除 ...

  3. websocket教程(一) 非常有趣的理解websocket

    一.websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有 1 ...

  4. DataInputStream EOFEXCEPTION

    在编写socket通信时,服务端使用了DataInputStream.readUTF()读取字节流时,出现EOFEXCEPTION 原因是客户端没有使用DataOutputStream.writeUT ...

  5. Java 多线程笔记

    资料来源于网络,仅供参考学习.   1.A Java program ends when all its threads finish (more specifically, when all its ...

  6. 轻量级quill富文本编辑器

    因为公司产品需要在移动端编辑文本,所以发现了这个轻量级的好东西,网上也没找到比较好的案例,就自己总结了下,有兴趣的直接复制代码运行看看就知道啦! 下面是quill.js的CDN加速地址: <!- ...

  7. jingtai ip

    BOOTPROTO=staticONBOOT=yesIPADDR=192.168.1.109NETMASK=255.255.255.0GATEWAY=192.168.1.1 HWADDR=00:e0: ...

  8. 用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)

    ERROR 1045(28000)信息是因为权限的问题.这个ERROR分为两种情况: 第一种: ERROR 1045 (28000): Access denied for user 'root'@'l ...

  9. sql server存储过程实现批量删除

    在项目中用到了存储过程来进行批量删除的操作,给大家分享一下 原理就是把id组成的字符串在数据库分割成数组放一张临时表,删除的时候与id进行对照 --删除会员信息 if OBJECT_ID('pro_D ...

  10. Oracle之 11gR2 RAC 修改监听器端口号的步骤

    Oracle 11gR2 RAC 修改监听器端口号的步骤 说明:192.168.188.181 为public ip1192.168.188.182 为public ip2192.168.188.18 ...