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键盘事件的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • python 平衡二叉树实现代码示例

    python 平衡二叉树实现代码示例

    这篇文章主要介绍了python 平衡二叉树实现代码示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • python如何查找列表中元素的位置

    python如何查找列表中元素的位置

    这篇文章主要介绍了python如何查找列表中元素的位置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python中read,readline和readlines的区别案例详解

    Python中read,readline和readlines的区别案例详解

    这篇文章主要介绍了Python中read,readline和readlines的区别案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 用Python编写一个国际象棋AI程序

    用Python编写一个国际象棋AI程序

    在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来。你可以直接通读本文,或者去下载代码,边读边看代码。虽然去看看其他文件中有什么AI依赖的类也可能有帮助,但是AI部分全都在AI.py文件中
    2014-11-11
  • Flask框架踩坑之ajax跨域请求实现

    Flask框架踩坑之ajax跨域请求实现

    这篇文章主要介绍了Flask框架踩坑之ajax跨域请求实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • pycharm+robot开发及配置指南

    pycharm+robot开发及配置指南

    这篇文章主要介绍了pycharm+robot开发指南,包括pycharm配置及robot的配置,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • python对网页文本的格式化实例方法

    python对网页文本的格式化实例方法

    在本篇文章里小编给大家整理是一篇关于python对网页文本的格式化实例方法,有兴趣的朋友们可以跟着学习参考下。
    2021-10-10
  • 在Python中测试访问同一数据的竞争条件的方法

    在Python中测试访问同一数据的竞争条件的方法

    这篇文章主要介绍了在Python中测试访问同一数据的竞争条件的方法,探究多线程或多进程情况下优先访问权的问题,需要的朋友可以参考下
    2015-04-04
  • Python数据清洗工具之Numpy的基本操作

    Python数据清洗工具之Numpy的基本操作

    Numpy的操作对象是一个ndarray,所以在使用这个库进行计算的时候需要将数据进行转化,这篇文章主要介绍了Python数据清洗工具之Numpy的基本操作,需要的朋友可以参考下
    2021-04-04

最新评论