Python全面解析xml文件

 更新时间:2024年02月10日 09:48:22   作者:AllardZhao  
这篇文章主要介绍了Python全面解析xml文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

如何解析简单的xml文档?       

实际案例

xml是一种十分常用的标记性语言,可提供统一的方法来描述应用程序的结构化数据:

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

python中如何解析xml文档?

解决方案

使用标准库中的xml.etree.ElementTree,其中的parse函数可以解析XML文档。

代码演示

(1)使用parse解析XML文档

from xml.etree.ElementTree import parse
 
f = open('demo.xml')
# 第1个参数为输入源,返回一个ElementTree对象
et = parse(f)
# 通过元素树(ElementTree)得到根结点
root = et.getroot()
print(root)
# 查看标签
print(root.tag)
# 查看属性
print(root.attrib)
# 查看文本,去除空格
print(root.text.strip())
 
# 遍历元素树
# 得到节点的子元素,python3中getchildren被废弃
children = list(root)
print(children)
# 获取每个子节点元素的属性
for child in root:
    print(child.get('name'))
'''
find、findall和iterfind只能找对于
当前的元素它的直接子元素,不能查找孙子元素。
    
'''
# 根据标签寻找子元素,find总是找到第1个碰到的元素
print(root.find('country'))
# findall是找到所有的的元素
print(root.findall('country'))
# 不需要列表,希望是一个可迭代对象,得到一个生成器对象
print(root.iterfind('country'))
 
for e in root.iterfind('country'):
    print(e.get('name'))
 
# 无论在那个层级下都能找到rank标签
# 在默认情况下不输入参数,会列出整个当前节点之下的所有元素
print(list(root.iter()))
# 递归的去寻找标签为rank的子节点
print(list(root.iter('rank')))

(2)关于findall查找的高级用法

from xml.etree.ElementTree import parse
 
f = open('demo.xml')
# 第1个参数为输入源,返回一个ElementTree对象
et = parse(f)
# 通过元素树(ElementTree)得到根结点
root = et.getroot()
 
# *能匹配所有的child,只想找root的所有孙子节点
print(root.findall('country/*'))
# 查找任意层次下的子元素,.点为当前节点,..为父节点
print(root.findall('.//rank'))
print(root.findall('.//rank/..'))
# @描述包含某一属性,[@attrib]
print(root.findall('country[@name]'))
# 指定属性为特定值,[@attrib='value']
print(root.findall('country[@name="Singapore"]'))
# 指定一个元素必须包含一个指定的子元素,[tag]
print(root.findall('country[rank]'))
# 指定元素的文本必须等于特定的值,[tag='text']
print(root.findall('country[rank="5"]'))
# 找多个元素路径指定相对位置,[position]
print(root.findall('country[1]'))
print(root.findall('country[2]'))
# last()为倒着找
print(root.findall('country[last()]'))
# 找倒数第二个
print(root.findall('country[last()-1]'))

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python入门教程(二十一)Python的数组

    Python入门教程(二十一)Python的数组

    这篇文章主要介绍了Python入门教程(二十一)Python的数组,数组是一种特殊变量,数组可以在单个名称下保存多个值,我们可以通过引用索引号来访问这些值,需要的朋友可以参考下
    2023-04-04
  • python 字典和列表嵌套用法详解

    python 字典和列表嵌套用法详解

    python中字典和列表的使用,在数据处理中应该是最常用的,今天通过多种场景给大家分享python 字典和列表嵌套用法,感兴趣的朋友一起看看吧
    2021-06-06
  • 详解pandas apply 并行处理的几种方法

    详解pandas apply 并行处理的几种方法

    这篇文章主要介绍了详解pandas apply 并行处理的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python中内置库csv的使用及说明

    python中内置库csv的使用及说明

    这篇文章主要介绍了python中内置库csv的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python实现封装打包自己写的代码,被python import

    Python实现封装打包自己写的代码,被python import

    这篇文章主要介绍了Python实现封装打包自己写的代码,被python import,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python中Tkinter复选框Checkbutton是否被选中判断

    python中Tkinter复选框Checkbutton是否被选中判断

    这篇文章主要介绍了python中Tkinter复选框Checkbutton是否被选中判断方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python通过TimedRotatingFileHandler按时间切割日志

    python通过TimedRotatingFileHandler按时间切割日志

    这篇文章主要介绍了python通过TimedRotatingFileHandler按时间切割日志的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Python的type函数结果你知道嘛

    Python的type函数结果你知道嘛

    这篇文章主要为大家介绍了Python的type函数结果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法

    python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法

    今天小编就为大家分享一篇python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • numpy下的flatten()函数用法详解

    numpy下的flatten()函数用法详解

    这篇文章主要介绍了numpy下的flatten()函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论