xml介绍与解析,及xml库包使用
欢迎大家关注笔者,你的关注是我持续更博的最大动力
原创文章,转载告知,盗版必究
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数据
映射到内存中(比较慢、耗内存
),解析成一个树,通过对树的操作XMLElementTree(元素树)
: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库包使用相关推荐
- php如何解释xml,PHP – 如何解析这个xml?
我正在尝试解析下面的XML,以便最终得到一个看起来像样本的数组--我很难弄清楚如何获取标签内部的属性以输出我想要的方式它- XML 我想要的数组::注意添加的数组元素 Array [cust] =&g ...
- java获取web.xml 参数_解析web.xml中在Servlet中获取context-param和init-param内的参数
web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: context/param avalible durin ...
- CC00119.bigdatajava——|JavaMySQL.XML.V10|——|MySQL.v10|常见XML解析器|DOM4API介绍|
一.XML常见的解析器 ### --- XML常见的解析器~~~ # 解析器:就是根据不同的解析方式提供的具体实现.有的解析器操作过于繁琐, --> 为了方便开发人员,有提供易于操作的解析开发包 ...
- python解析xml文件选用模块_Python标准库系列之xml模块
Python's interfaces for processing XML are grouped in the xml package. 带分隔符的文件仅有两维的数据:行和列.如果你想在程序之间交 ...
- java中解析xml解读,java解析xml(JDOM)
下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档. 为了简单,我用了如下XML作为要解析的XML文件: rjzjh 60.0 够简单的吧,但它对于我们关心 ...
- Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector
The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...
- Android 天气预报【解析XML / Json文件(2种方式:手动解析、Gson库解析)】
源码 [工程文件]:https://gitee.com/lwx001/Weather XML : activity_main.xml : <RelativeLayout xmlns:androi ...
- 配置文件解析之XML介绍和用法
0. 配置文件介绍和分类 介绍 : 好处 : 可以让项目中使用的数据, 灵活的加载和更变, 实现解耦 分类 : Properties : 常用于一对一的存储 键值对 username=root pas ...
- SAP ABAP ZCL_XML_UTIL 使用介绍:ABAP 和 XML 间的序列化和解析
SAP ABAP ZCL_XML_UTIL 使用介绍:ABAP 和 XML 间的序列化和解析 简介: SAP ABAP ZCL_XML_UTIL 使用介绍:ABAP 和 XML 间的序列化和解析. 关 ...
最新文章
- 哈佛大学通过百度搜索的数据写了篇论文:新冠病毒起源于去年8月的武汉...
- ubuntu18.04.4 安装百度硬盘
- 推荐一些不错的开源免费易上手的web前端框架
- 配置管理和Java开发_Java开发环境之------MyEclipse中服务器Server的配置,管理和启动...
- Asp.net中基于Forms验证的角色验证授权[转]
- I've got so many hongbaos(should it be translated as red bags?)
- Android quot;QR二维码扫描quot;
- 日首相:对韩日问题深感遗憾 将采取强硬应对措施
- java linux 调用so文件,linux下java jni调用.so文件的方法
- C中error的使用
- 搭建 Sql Server 2008 R2 Failover Cluster
- DELPHI导出wps报错无效的类字符串
- verilog实现矩阵卷积运算
- 贝叶斯(Bayes)决策理论
- 【010Editor】010Editor使用技巧汇总(不断更新中)
- NOI与NOIP的区别
- 计算机wmi配置错误,系统没有WMI服务、WMI错误修复办法
- PC与IOS outlook客户端配置大全——(163邮箱、QQ邮箱、谷歌gmail邮箱)
- /MD 与 /MT、/MTD与/MDD的区别
- 第四天:基础入门-30余种加密编码进制Web数据库系统代码参数值
热门文章
- Web/app端自动化测试对比
- win7系统Myeclipse下切换SVN用户
- 201521123024 《Java程序设计》 第九周学习总结
- python 柱状图-python 柱状图
- 手机怎么下载python并安装-Python入门【1】Python下载安装,这几步你要了解
- kali查看python版本-kali中python版本的切换方法
- python新手项目-推荐:一个适合于Python新手的入门练手项目
- python实现文件下载-python实现文件上传下载
- python做电脑软件-PC端数据下载软件开发(Python)
- pythonweb开发-PythonWeb开发教程(一),开发之前需要准备什么