模块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. nova创建虚拟机源码分析系列之五 nova源码分发实现

    前面讲了很多nova restful的功能,无非是为本篇博文分析做铺垫.本节说明nova创建虚拟机的请求发送到openstack之后,nova是如何处理该条URL的请求,分析到处理的类. nova对于 ...

  2. 谈谈序列化—实体bean一定要实现Serializable接口?

    导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型.但是由于map每次都要匹配key值,很麻烦.所以在之后就将参数传递和返回类型全都改成了实体bean ...

  3. python爬虫——建立IP池,将可用IP存放到redis

    直接上代码,每行代码后面都有注释 import urllib.request import urllib import re import time import random import sock ...

  4. JavaScript的DOM编程--03--读写属性节点

    读写属性节点: 1)可以直接通过 cityNode.id 这样的方式来获取和设置属性节点的值 2)通过元素节点的 getAttributeNode 方法来获取属性节点, 然后在通过 nodeValue ...

  5. 例子:js超级玛丽小游戏

    韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键 ...

  6. WPF-控件(1)

    小记:最近公司使用WPF开发一款新的产品,从零基础开始学习WPF,在看书的过程中,有些内容需要规整到一起,最终选择了博客园,希望对自己所掌握的知识有所规整. --------------------- ...

  7. 吓尿了,mac下bash出了问题

    由于个人的脑残行为,使用homebrew安装bash后,使用chsh命令将其改成brew安装的特定版本的bash,结果上次brew更新bash之后,就彻底用不了shell了... 无奈只能添加新的管理 ...

  8. Java内存分配以及GC

    转自http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html  写的太棒了,简单易懂 Java垃圾回收概况 Java GC(Gar ...

  9. numpy库常用基本操作

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  10. Java贪吃蛇感想

    暑假敲代码的效率真的不高呀,一个这种小游戏从最开始构思到最后实施代码,从最开始的Demo版本到最后的第四版本,花了一个星期了.本想再更新一个版本,加入双人对战模式,还想写个AI版,可是我估计按照现在我 ...