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 xlwings 读取Excel文件的正确姿势

    浅谈Python xlwings 读取Excel文件的正确姿势

    这篇文章主要介绍了浅谈Python xlwings 读取Excel文件的正确姿势,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • CentOS6.5设置Django开发环境

    CentOS6.5设置Django开发环境

    这篇文章主要为大家详细介绍了CentOS6.5设置Django开发环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Python中pycharm编辑器界面风格修改方法

    Python中pycharm编辑器界面风格修改方法

    这篇文章主要介绍了Python中pycharm编辑器界面风格修改方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python+django+mysql开发实战(附demo)

    python+django+mysql开发实战(附demo)

    本文主要介绍了python+django+mysql开发实战(附demo),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • keras的get_value运行越来越慢的解决方案

    keras的get_value运行越来越慢的解决方案

    这篇文章主要介绍了keras的get_value运行越来越慢的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 机器学习python实战之决策树

    机器学习python实战之决策树

    这篇文章主要为大家详细介绍了机器学习python实战之决策树的相关资料 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Python 使用csv库处理CSV文件的方法

    Python 使用csv库处理CSV文件的方法

    Python中集成了专用于处理csv文件的库,名为:csv,本文给大家介绍了Python使用csv库处理CSV文件的方法及csv库中4个常用的对象,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • pyqt5打包成exe可执行文件的方法

    pyqt5打包成exe可执行文件的方法

    最近做了一个窗口程序,那么能不能将其生成一个可执行文件,本文就介绍一下pyqt5打包成exe可执行文件的方法,感兴趣的可以了解一下
    2021-05-05
  • Python基于SMTP发送邮件的方法

    Python基于SMTP发送邮件的方法

    这篇文章主要介绍了Python基于SMTP 发送邮件的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • 一招教你搞定Pycharm无法下载汉化包问题

    一招教你搞定Pycharm无法下载汉化包问题

    最近需要用到自然语言处理工具,python提供了很多自带的工具包,下面这篇文章主要给大家介绍了关于Pycharm无法下载汉化包问题的解决办法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-03-03

最新评论