欢迎大家关注笔者,你的关注是我持续更博的最大动力

原创文章,转载告知,盗版必究

xml介绍与解析,及xml库包使用

文章目录:

  • 1 XML简单介绍
    • 1.1 XML简单介绍
    • 1.2 XML语法结构
  • 2 XML.etree.ElementTree的使用
    • 2.1 读取xml文件,然后返回根元素
    • 2.2 获取子元素及子元素属性
    • 2.3 获取元素标签中存储的数据
    • 2.4 查找指定元素标签中存储的数据
    • 2.5 修改XML文件
      • 2.5.1 修改xml文件
      • 2.5.1 删除xml文件中一些元素

xml库包,就是用来解析xml文件,提取出xml文件中存储的具体内容


1 XML简单介绍

1.1 XML简单介绍

XML(eXtensible Markup Language):

可扩展标记语言:被设计用来传输存储数据

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同。

python有三种方法解析XML文件参考:

  • SAX(simple API for XML)
  • DOM(Document Object Model):将XML数据映射到内存中(比较慢、耗内存),解析成一个树,通过对树的操作XML
  • ElementTree(元素树):ElementTree像一个轻量级的DOM,具有方便友好的API,大妈可用性好,速度快,内存消耗少。

1.2 XML语法结构

下面主要以ElementTree来讲解如何解析一个xml文件

2 XML.etree.ElementTree的使用

测试的xml文件:test.xml 数据如下:

<?xml version="1.0"?>
<data><country name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country>
</data>

import xml.etree.ElementTree as ET

2.1 读取xml文件,然后返回根元素

ET.parse()接受参数可以是xml文件路径,也可以是读取xml的文件句柄

parse(source: {read}, parser: Any = None) -> ElementTree

  • ET.parse():接受参数为xml文件路径
import xml.etree.ElementTree as ETtree = ET.parse('./test.xml')
root = tree.getroot()
print(type(root), root)
# <class 'xml.etree.ElementTree.Element'>
# <Element 'data' at 0x00000243ECFE5958>
  • ET.parse():接受参数为读取xml的文件句柄
import xml.etree.ElementTree as ETtree = ET.parse(open('./test.xml'))
root = tree.getroot()
print(root)
# <Element 'data' at 0x00000243ECFE5958>

2.2 获取子元素及子元素属性

作为元素Element,如果有子元素

  • 可以使用tag属性获取子元素名元素名字符串返回
  • 可以使用attrib属性获取子元素中定义的属性属性字典键值对返回
for child in root:print(child.tag, child.attrib)print(type(child.tag), type(child.attrib))
'''
country {'name': 'Liechtenstein'}
<class 'str'> <class 'dict'>
country {'name': 'Singapore'}
<class 'str'> <class 'dict'>
country {'name': 'Panama'}
<class 'str'> <class 'dict'>
'''

2.3 获取元素标签中存储的数据

使用text属性可以获取元素标签存储数据,使用text属性返回的是字符串类型

print(root.tag)
print(root.attrib)  # 根标签元素中没有属性,因此返回一个空字典
print(root[0])
print(root[0].text, type(root[0].text))
print(root[0][1])
# root根元素的第一个子元素标签是country,然后country的子元素的第二个元素
print(root[0][1].text, type(root[0][1].text))
'''
data
{}
<Element 'country' at 0x0000018269E1F9A8><class 'str'>
<Element 'year' at 0x00000274B9790A48>
2008 <class 'str'>
'''

2.4 查找指定元素标签中存储的数据

Element.iter() 方法可以递归遍历其下所有子树(包括子级、子级的子级等)

如下:递归的找到根元素下所有的 'neighbor’元素

for neighbor in root.iter('neighbor'):# print(neighbor.tag)  # 输出都是neighborprint(neighbor.attrib)
'''
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
'''

1、查找指定元素中存储的数据

rootElement.find('childElement_name'):返回子元素中存储的数据,返回类型字符串

2、获取中元素的属性的属性值

rootElement.get('rootElementAttrib_name'):返回元素属性的值,返回类型字符串

for country in root.iter('country'):# 查找country元素下的子元素rank,然后输出rank元素中存储的值# contry.find('rank'):find()方法是查找country元素的子元素rank存储的值rank = country.find('rank').textprint(type(rank), rank)# country.get('name'):get()方法是获取元素country中属性name对应的属性值name = country.get('name')print(type(name), name)'''
<class 'str'> 1
<class 'str'> 4
<class 'str'> 68
'''

2.5 修改XML文件

2.5.1 修改xml文件

  • 修改元素存储数据:使用text属性
  • 修改元素的属性:使用Element.set()方法
for rank in root.iter('rank'):new_rank = int(rank.text) + 1  # rank元素标签中存储的值加1rank.text = str(new_rank)  # 转换成字符串类型rank.set('update', 'yes')  # 给rank元素设置属性  update="yes"tree.write('output.xml')

修改之后的文件如下:

<?xml version="1.0"?>
<data><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>
</data>

2.5.1 删除xml文件中一些元素

Element.remove()删除元素。假设我们要删除排名高于50的所有国家/地区:

for country in root.findall('country'):rank = int(country.find('rank').text)if rank > 50:root.remove(country)tree.write('output2.xml')

删除之后的结果如下:

<?xml version="1.0"?>
<data><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>
</data>

参考1:https://docs.python.org/zh-cn/3/library/xml.html




♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

xml介绍与解析,及xml库包使用相关推荐

  1. php如何解释xml,PHP – 如何解析这个xml?

    我正在尝试解析下面的XML,以便最终得到一个看起来像样本的数组--我很难弄清楚如何获取标签内部的属性以输出我想要的方式它- XML 我想要的数组::注意添加的数组元素 Array [cust] =&g ...

  2. java获取web.xml 参数_解析web.xml中在Servlet中获取context-param和init-param内的参数

    web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: context/param avalible durin ...

  3. CC00119.bigdatajava——|JavaMySQL.XML.V10|——|MySQL.v10|常见XML解析器|DOM4API介绍|

    一.XML常见的解析器 ### --- XML常见的解析器~~~ # 解析器:就是根据不同的解析方式提供的具体实现.有的解析器操作过于繁琐, --> 为了方便开发人员,有提供易于操作的解析开发包 ...

  4. python解析xml文件选用模块_Python标准库系列之xml模块

    Python's interfaces for processing XML are grouped in the xml package. 带分隔符的文件仅有两维的数据:行和列.如果你想在程序之间交 ...

  5. java中解析xml解读,java解析xml(JDOM)

    下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档. 为了简单,我用了如下XML作为要解析的XML文件: rjzjh 60.0 够简单的吧,但它对于我们关心 ...

  6. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

    The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...

  7. Android 天气预报【解析XML / Json文件(2种方式:手动解析、Gson库解析)】

    源码 [工程文件]:https://gitee.com/lwx001/Weather XML : activity_main.xml : <RelativeLayout xmlns:androi ...

  8. 配置文件解析之XML介绍和用法

    0. 配置文件介绍和分类 介绍 : 好处 : 可以让项目中使用的数据, 灵活的加载和更变, 实现解耦 分类 : Properties : 常用于一对一的存储 键值对 username=root pas ...

  9. SAP ABAP ZCL_XML_UTIL 使用介绍:ABAP 和 XML 间的序列化和解析

    SAP ABAP ZCL_XML_UTIL 使用介绍:ABAP 和 XML 间的序列化和解析 简介: SAP ABAP ZCL_XML_UTIL 使用介绍:ABAP 和 XML 间的序列化和解析. 关 ...

最新文章

  1. 哈佛大学通过百度搜索的数据写了篇论文:新冠病毒起源于去年8月的武汉...
  2. ubuntu18.04.4 安装百度硬盘
  3. 推荐一些不错的开源免费易上手的web前端框架
  4. 配置管理和Java开发_Java开发环境之------MyEclipse中服务器Server的配置,管理和启动...
  5. Asp.net中基于Forms验证的角色验证授权[转]
  6. I've got so many hongbaos(should it be translated as red bags?)
  7. Android quot;QR二维码扫描quot;
  8. 日首相:对韩日问题深感遗憾 将采取强硬应对措施
  9. java linux 调用so文件,linux下java jni调用.so文件的方法
  10. C中error的使用
  11. 搭建 Sql Server 2008 R2 Failover Cluster
  12. DELPHI导出wps报错无效的类字符串
  13. verilog实现矩阵卷积运算
  14. 贝叶斯(Bayes)决策理论
  15. 【010Editor】010Editor使用技巧汇总(不断更新中)
  16. NOI与NOIP的区别
  17. 计算机wmi配置错误,系统没有WMI服务、WMI错误修复办法
  18. PC与IOS outlook客户端配置大全——(163邮箱、QQ邮箱、谷歌gmail邮箱)
  19. /MD 与 /MT、/MTD与/MDD的区别
  20. 第四天:基础入门-30余种加密编码进制Web数据库系统代码参数值

热门文章

  1. Web/app端自动化测试对比
  2. win7系统Myeclipse下切换SVN用户
  3. 201521123024 《Java程序设计》 第九周学习总结
  4. python 柱状图-python 柱状图
  5. 手机怎么下载python并安装-Python入门【1】Python下载安装,这几步你要了解
  6. kali查看python版本-kali中python版本的切换方法
  7. python新手项目-推荐:一个适合于Python新手的入门练手项目
  8. python实现文件下载-python实现文件上传下载
  9. python做电脑软件-PC端数据下载软件开发(Python)
  10. pythonweb开发-PythonWeb开发教程(一),开发之前需要准备什么