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函数装饰器的使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python使用Pandas处理测试数据的方法

    Python使用Pandas处理测试数据的方法

    Pandas是一个功能极其强大的数据分析库,可以高效地操作各种数据集,这篇文章主要介绍了Python自动化测试-使用Pandas来高效处理测试数据,需要的朋友可以参考下
    2023-02-02
  • Python使用OPENCV的目标跟踪算法实现自动视频标注效果

    Python使用OPENCV的目标跟踪算法实现自动视频标注效果

    这篇文章主要介绍了Python使用OPENCV的目标跟踪算法进行简单的自动视频标注,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python实现自动化域名批量解析分享

    Python实现自动化域名批量解析分享

    这篇文章主要介绍了Python实现自动化域名批量解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • 如何使用Python实现LRU缓存(最新整理)

    如何使用Python实现LRU缓存(最新整理)

    LRU是Least Recently Used 的缩写,即“最近最少使用”,也就是说,LRU缓存把最近最少使用的数据移除,让给最新读取的数据,本文介绍如何使用Python实现LRU缓存,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Redis之windows下主从复制案例讲解

    Redis之windows下主从复制案例讲解

    这篇文章主要介绍了Redis之windows下主从复制案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • python中pd.Series()函数的使用

    python中pd.Series()函数的使用

    本文主要介绍了python中pd.Series()函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • python操作excel让工作自动化

    python操作excel让工作自动化

    这篇文章主要为大家详细介绍了python如何操作excel让工作自动化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Python批量获取并保存手机号归属地和运营商的示例

    Python批量获取并保存手机号归属地和运营商的示例

    这篇文章主要介绍了Python批量获取并保存手机号的归属地和运营商的示例,帮助大家更好的利用python处理数据,感兴趣的朋友可以了解下
    2020-10-10
  • Pyhthon中使用compileall模块编译源文件为pyc文件

    Pyhthon中使用compileall模块编译源文件为pyc文件

    这篇文章主要介绍了Pyhthon中使用compileall模块编译源文件为pyc文件,需要的朋友可以参考下
    2015-04-04

最新评论