转载自:https://www.cnblogs.com/gouguoqilinux/p/9168332.html

xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml

xml跟html都属于是标签语言

  1. 我们主要学习的是ElementTreepythonXML处理模块,它提供了一个轻量级的对象模型,在使用ElementTree模块时,需要import xml.etree.ElementTre
  1. ElementTree相当于整个xml节点树,而Element表示节点数中的一个单独节点
  1. 我们看下下面的xml文本,标签分为2种。
  1. 1、自闭和标签  <rank updated="yes">2</rank>
  1. 2、非闭合标签  <neighbor direction="E" name="Austria" />
 
  1. <data>
  2. <country name="Liechtenstein">
  3. <rank updated="yes">2</rank>
  4. <year updated="yes">2010</year>
  5. <gdppc>141100</gdppc>
  6. <neighbor direction="E" name="Austria" />
  7. <neighbor direction="W" name="Switzerland" />
  8. </country>
  9. <country name="Singapore">
  10. <rank updated="yes">5</rank>
  11. <year updated="yes">2013</year>
  12. <gdppc>59900</gdppc>
  13. <neighbor direction="N" name="Malaysia" />
  14. </country>
  15. <country name="Panama">
  16. <rank updated="yes">69</rank>
  17. <year updated="yes">2013</year>
  18. <gdppc>13600</gdppc>
  19. <neighbor direction="W" name="Costa Rica" />
  20. <neighbor direction="E" name="Colombia" />
  21. </country>
  22. </data> 
 

二、xml.etree.ElementTree 模块的具体应用

1、打印根标签的名字

 
  1. import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET
  2. tree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,解析开拿到一个tree,tree就是一个对象
  3. root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思
  4. print(root.tag)#root这个对象有一个属性tagtag的值就是根标签的名字
  5.  
  6. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  7.  
  8. data
 

什么是标签,什么是属性,举个例子

<country name="Liechtenstein">

conuntry是标签

name="Liechtenstein" 是这个标签的属性

<neighbor direction="W" name="Costa Rica" />

neighbor是标签

direction="W" name="Costa Rica"  这2个都是标签的属性

2、用for循环查看下root下面是什么东西

 
  1. for n in root:
  2. print(n)
  3.  
  4. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  5.  
  6. <Element 'country' at 0x0000000000E339F8>
  7.  
  8. <Element 'country' at 0x0000000000E38408>
  9.  
  10. <Element 'country' at 0x0000000000E38598>
 

这3个地址指向的就是对象,打印下这三个标签的名字,用tag这个属性就可以了

 
  1. for n in root:
  2. print(n.tag)
  3.  
  4. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  5.  
  6. country
  7.  
  8. country
  9.  
  10. country
 

在打印下country下面的标签

 
  1. for n in root:
  2. for i in n:
  3. print(i.tag)
  4.  
  5. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  6.  
  7. rank
  8.  
  9. year
  10.  
  11. gdppc
  12.  
  13. neighbor
  14.  
  15. neighbor
  16.  
  17. rank
  18.  
  19. year
  20.  
  21. gdppc
  22.  
  23. neighbor
  24.  
  25. rank
  26.  
  27. year
  28.  
  29. gdppc
  30.  
  31. neighbor
  32.  
  33. neighbor
 

3、打印标签的属性 attrib

打印country的属性

 
  1. for n in root:
  2. print(n.attrib)
  3.  
  4. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  5.  
  6. {'name': 'Liechtenstein'}
  7.  
  8. {'name': 'Singapore'}
  9.  
  10. {'name': 'Panama'}
 

在打印下country里面的对象的属性

 
  1. for n in root:
  2. for i in n:
  3. print(i.attrib)
  4.  
  5. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  6.  
  7. {'updated': 'yes'}
  8.  
  9. {'updated': 'yes'}
  10.  
  11. {}
  12.  
  13. {'name': 'Austria', 'direction': 'E'}
  14.  
  15. {'name': 'Switzerland', 'direction': 'W'}
  16.  
  17. {'updated': 'yes'}
  18.  
  19. {'updated': 'yes'}
  20.  
  21. {}
  22.  
  23. {'name': 'Malaysia', 'direction': 'N'}
  24.  
  25. {'updated': 'yes'}
  26.  
  27. {'updated': 'yes'}
  28.  
  29. {}
  30.  
  31. {'name': 'Costa Rica', 'direction': 'W'}
  32.  
  33. {'name': 'Colombia', 'direction': 'E'}
 

4、text  标签实际包裹的内容

 
  1. for n in root:
  2. for i in n:
  3. print(i.text)
  4.  
  5. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  6.  
  7. 2
  8.  
  9. 2010
  10.  
  11. 141100
  12.  
  13. None
  14.  
  15. None
  16.  
  17. 5
  18.  
  19. 2013
  20.  
  21. 59900
  22.  
  23. None
  24.  
  25. 69
  26.  
  27. 2013
  28.  
  29. 13600
  30.  
  31. None
  32.  
  33. None 
 

5、iter

想取到每个属性中的year的text值就应该用iter方法这样取

 
  1. for n in root.iter("year"):
  2. print(n.tag,n.text)
  3.  
  4. C:\python35\python3.exe D:/pyproject/day21模块/xml_test
  5.  
  6. year 2010
  7.  
  8. year 2013
  9.  
  10. year 2013
 

6、对xml文件数据进行修改操作

 
  1. import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET
  2.  
  3. tree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,
  4. #解析开拿到一个tree,tree就是一个对象
  5. root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思
  6. # print(root.tag)#root这个对象有一个属性tag,tag的值就是根标签的名字
  7.  
  8. for n in root.iter("year"):
  9. new_year=int(n.text)+1
  10. n.text=str(new_year)#修改year标签的text属性
  11. n.set("updated1","yes")#给year这个标签增加一个属性
  12. tree.write("xml_lesson.xml")#直接把修改的写入到文件中
 
 
  1. <country name="Liechtenstein">
  2. <rank updated="yes">2</rank>
  3. <year updated="yes" updated1="yes">2012</year>
  4. <gdppc>141100</gdppc>
  5. <neighbor direction="E" name="Austria" />
  6. <neighbor direction="W" name="Switzerland" />
  7. </country>
  8. <country name="Singapore">
  9. <rank updated="yes">5</rank>
  10. <year updated="yes" updated1="yes">2015</year>
  11. <gdppc>59900</gdppc>
  12. <neighbor direction="N" name="Malaysia" />
  13. </country>
  14. <country name="Panama">
  15. <rank updated="yes">69</rank>
  16. <year updated="yes" updated1="yes">2015</year>
  17. <gdppc>13600</gdppc>
  18. <neighbor direction="W" name="Costa Rica" />
  19. <neighbor direction="E" name="Colombia" />
  20. </country>
  21. </data>
 

7、对xml文件进行删除操作,比如删除排名大于50的国家,需要取到每个conutry中的rank的text

 
  1. import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET
  2.  
  3. tree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,
  4. #解析开拿到一个tree,tree就是一个对象
  5. root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思
  6. # print(root.tag)#root这个对象有一个属性tag,tag的值就是根标签的名字
  7.  
  8. for n in root.findall("country"):#找到所有的country
  9. rank=int(n.find("rank").text)#找到所有的ranktext
  10. if rank > 50:#判断值大于50
  11. root.remove(n)#就删除country这个标签
  12. tree.write("xml_lesson.xml")#写入文件
 

删除之后,文件里面只有2个country了

 
  1. <data>
  2. <country name="Liechtenstein">
  3. <rank updated="yes">2</rank>
  4. <year updated="yes" updated1="yes">2012</year>
  5. <gdppc>141100</gdppc>
  6. <neighbor direction="E" name="Austria" />
  7. <neighbor direction="W" name="Switzerland" />
  8. </country>
  9. <country name="Singapore">
  10. <rank updated="yes">5</rank>
  11. <year updated="yes" updated1="yes">2015</year>
  12. <gdppc>59900</gdppc>
  13. <neighbor direction="N" name="Malaysia" />
  14. </country>
  15. </data>
 

8、如何通过模块创建xml文件呢

 
  1. import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET
  2. new_xml=ET.Element("namelist")#创建了一个根节点
  3. #相当于创建了<namelist></namelist>
  4. name=ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
  5. #创建一个子标签name,然后增加一个属性
  6. age=ET.SubElement(name,"age",attrib={"checked":"no"})
  7. sex=ET.SubElement(name,"sex")
  8. sex.text="28"
  9.  
  10. et=ET.ElementTree(new_xml)#生成文档对象
  11. et.write("test.xml",encoding="utf8",xml_declaration=True)
 

查看下生成的text.xml这个文件内容

 
  1. <namelist>
  2.  
  3. <name enrolled="yes">
  4.  
  5. <age checked="no"/>
  6.  
  7. <sex>28</sex>
  8.  
  9. </name>
  10.  
  11. </namelist> 
 

pytho xml的更多相关文章

  1. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  2. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  3. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

  4. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  5. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

  6. PHP中遍历XML之SimpleXML

    简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...

  7. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  8. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

随机推荐

  1. CSS + ul li 横向排列的两种方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. ControlTemplate in WPF —— DatePicker

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  3. wpf prism4 出现问题:无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。

    WPF Prism 框架 程序 出现 问题: 无法加载一个或多个请求的类型.有关更多信息,请检索 LoaderExceptions 属性. 1.开始以为是配置的问题,找了半天,最后原来是有个依赖类库没 ...

  4. Python 基础语法_Python脚本文件结构

    目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...

  5. PyCharm安装+破解

    PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍一下 PyCharm 在 Windows下是如何安装的. 这是 ...

  6. Java中volatile关键字的最全总结

    转载至:https://blog.csdn.net/u012723673/article/details/80682208 关于volatile很重要的一点: 它保证了可见性,即其他线程对volati ...

  7. c++ release和debug语句分离

    #ifdef _DEBUG a=1; #else a=2; #endif

  8. [转帖]Spring Cloud底层原理

    拜托!面试不要再问我Spring Cloud底层原理 https://mp.weixin.qq.com/s/ZH-3JK90mhnJPfdsYH2yDA 毫无疑问,Spring Cloud 是目前微服 ...

  9. CentOS7之ssh-Xshell密钥认证登陆

    操作系统版本:CentOS Linux release 7.2.1511 (Core)   SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打开Xshell工 ...

  10. gym102201F_Fruit Tree

    题意 给一棵带权树,多次询问路径上出现次数超过一半的数. 分析 dfs序建主席树,维护的就是根到某个节点这段路径的值域情况. 因为题目所求的不是一般的众数,而是出现次数大于一半的,所以在主席树上可以直 ...