返回顶部
首页 > 资讯 > 后端开发 > Python >Python存取XML的常见方法实例分析
  • 439
分享到

Python存取XML的常见方法实例分析

实例常见方法 2022-06-04 18:06:10 439人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文实例讲述了python存取XML的常见方法。分享给大家供大家参考,具体如下: 目前而言,Python 3.2存取XML有以下四种方法: 1.Expat 2.DOM 3.SAX 4.ElementTree

本文实例讲述了python存取XML的常见方法。分享给大家供大家参考,具体如下:

目前而言,Python 3.2存取XML有以下四种方法:

1.Expat
2.DOM
3.SAX
4.ElementTree

以以下xml作为讨论依据


<?xml version="1.0" encoding="utf-8"?>
<Schools>
  <School Name="XiDian">
    <Class Id="030612">
      <Student Name="salomon">
        <Scores>
          <Math>98</Math>
          <English>85</English>
          <physics>89</physics>
        </Scores>
      </Student>
      <Student Name="Jupiter">
        <Scores>
          <Math>74</Math>
          <English>83</English>
          <physics>69</physics>
        </Scores>
      </Student>
    </Class>
    <Class Id="030611">
      <Student Name="Venus">
        <Scores>
          <Math>98</Math>
          <English>85</English>
          <physics>89</physics>
        </Scores>
      </Student>
      <Student Name="Mars">
        <Scores>
          <Math>74</Math>
          <English>83</English>
          <physics>69</physics>
        </Scores>
      </Student>
    </Class>
  </School>
</Schools>

Expat

Expat是一个面向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的文档。当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。该文件被输送到解析器,会被分割成多个片断,并分段装到内存中。因此expat可以解析那些巨大的文件。

SAX

SAX是个循序存取XML的解析器api,一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。事件在任一XML特性遇到时引发,以及遇到他们结尾时再次引发。XML属性也作为传给元素事件资料的一部分。SAX 处理时单方向性的;解析过的资料无法在不重新开始的情况下再次读取。

DOM

DOM解析器在任何处理开始之前,必须把整棵树放在内存,所以DOM解析器的内存使用量完全根据输入资料的大小(相对来说,SAX解析器的内存内容,是只基于XML档案的最大深度(XML树的最大深度)和单一XML项目上XML属性储存的最大资料)。

DOM在python3.2中有两种实现方式:

1.xml.minidom是一个基本的实现。
2.xml.pulldom只在需要时构建被访问的子树。


'''
Created on 2012-5-25
@author: salomon
'''
import xml.dom.minidom as minidom
dom = minidom.parse("E:\test.xml")
root = dom.getElementsByTagName("Schools") #The function getElementsByTagName returns nodeList.
print(root.length)
for node in root: 
  print("Root element is %s。" %node.tagName)# 格式化输出,与C系列语言有很大区别。
  schools = node.getElementsByTagName("School")
  for school in schools:
    print(school.nodeName)
    print(school.tagName)
    print(school.getAttribute("Name"))
    print(school.attributes["Name"].value)
    classes = school.getElementsByTagName("Class")
    print("There are %d classes in school %s" %(classes.length, school.getAttribute("Name")))
    for mclass in classes:
      print(mclass.getAttribute("Id"))
      for student in mclass.getElementsByTagName("Student"):
        print(student.attributes["Name"].value)
        print(student.getElementsByTagName("English")[0].nodeValue) #这个为什么啊?
        print(student.getElementsByTagName("English")[0].childNodes[0].nodeValue)
        student.getElementsByTagName("English")[0].childNodes[0].nodeValue = 75
f = open('new.xml', 'w', encoding = 'utf-8')
dom.writexml(f,encoding = 'utf-8')
f.close()

ElementTree

目前搜到的ElementTree的信息较少,目前不知道其工作机制。有资料显示ElementTree近乎一种轻量级的DOM,但是ElementTree 所有的 Element 节点的工作方式是一致的。它很类似于C#中的XpathNavigator。


'''
Created on 2012-5-25
@author: salomon
'''
from xml.etree.ElementTree import ElementTree
tree = ElementTree()
tree.parse("E:\test.xml")
root = tree.getroot()
print(root.tag)
print(root[0].tag)
print(root[0].attrib)
schools = root.getchildren() 
for school in schools:
  print(school.get("Name"))
  classes = school.findall("Class")
  for mclass in classes:
    print(mclass.items())
    print(mclass.keys())
    print(mclass.attrib["Id"])
    math = mclass.find("Student").find("Scores").find("Math")
    print(math.text)
    math.set("teacher", "bada")
tree.write("new.xml")

Compare:

就以上几点来说Expat和SAX解析XML方式相同,就是不知道性能相比怎样。DOM相对于以上两种解析器,消耗内存,而且由于存取耗时,所以处理文件相对来说慢。如果文件太大无法载入内存,DOM这种解析器就不能用了,但是对于,某些种类的XML验证需要存取整份文件,或者某些XML处理仅要求存取整份文件的需求时,DOM是唯一选择。

Note:

需要指出的是存取XML的这几项技术并不是Python独创的,Python也是通过借鉴其他语言或者直接从其他语言引入进来的。例如Expat就是一个用C语言开发的、用来解析XML文档的开发库。而SAX最初是由DavidMegginson采用java语言开发的,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。可以应用于任何编程语言

做为对比我也想列举一下C#存取XML文档的方式:

1. 基于DOM的XmlDocument
2. 基于流文件的XmlReader 和 XmlWriter(它和SAX流文件实现不同,SAX是事件驱动模型)。
3. Linq to Xml

流文件两种模型:XmlReader/XMLWriter VS SAX

流模型每次迭代XML文档中的一个节点,适合于处理较大的文档,所耗内存空间小。流模型中有两种变体——“推”模型和“拉”模型。

推模型也就是常说的SAX,SAX是一种靠事件驱动的模型,也就是说:它每发现一个节点就用推模型引发一个事件,而我们必须编写这些事件的处理程序,这样的做法非常的不灵活,也很麻烦。

.net中使用的是基于“拉”模型的实现方案,“拉”模型在遍历文档时会把感兴趣的文档部分从读取器中拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的提高了灵活性,在性能上“拉”模型可以选择性的处理节点,而SAX每发现一个节点都会通知客户机,从而,使用“拉”模型可以提高Application的整体效率。

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具
Http://tools.gimoo.net/code/xmljson

在线格式化XML/在线压缩XML:
http://tools.gimoo.net/code/xmlfORMat

XML在线压缩/格式化工具:
http://tools.gimoo.net/code/xml_format_compress

XML代码在线格式化美化工具:
http://tools.gimoo.net/code/xmlcodeformat

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python操作xml数据技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

--结束END--

本文标题: Python存取XML的常见方法实例分析

本文链接: https://lsjlt.com/news/13554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python存取XML的常见方法实例分析
    本文实例讲述了Python存取XML的常见方法。分享给大家供大家参考,具体如下: 目前而言,Python 3.2存取XML有以下四种方法: 1.Expat 2.DOM 3.SAX 4.ElementTree...
    99+
    2022-06-04
    实例 常见 方法
  • Android中常用的XML生成方法实例分析
    本文实例讲述了Android中常用的XML生成方法。分享给大家供大家参考。具体如下: 1. java代码: package com.android.antking.xml; ...
    99+
    2022-06-06
    XML 方法 Android
  • Moment.js常见用法实例分析
    这篇文章主要介绍“Moment.js常见用法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Moment.js常见用法实例分析”文章能帮助大家解决问题。Moment.js是一个轻量级的js时间...
    99+
    2023-06-30
  • XML语法实例分析
    本文小编为大家详细介绍“XML语法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“XML语法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。XML的语法规则既很简单...
    99+
    2024-04-02
  • Python字典的常用方法实例分析
    这篇文章主要讲解了“Python字典的常用方法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python字典的常用方法实例分析”吧!字典添加与修改方法利用 [ ] 处理看到 [] 我...
    99+
    2023-06-29
  • Python异常处理的方法实例分析
    这篇文章主要介绍了Python异常处理的方法实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python异常处理的方法实例分析文章都会有所收获,下面我们一起来看看吧。什么是异常与异常处理异常 &m...
    99+
    2023-06-29
  • Python解析XML实例分享
    本篇内容主要讲解“Python解析XML实例分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python解析XML实例分享”吧!Python 对 XML 的解析常见的 XML 编程接口有 DO...
    99+
    2023-06-02
  • PHP常见基础算法实例分析
    这篇文章主要介绍“PHP常见基础算法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP常见基础算法实例分析”文章能帮助大家解决问题。TODO堆排序选择排序链表翻转动态规划<phpcl...
    99+
    2023-06-30
  • 常见css hack实例分析
    这篇“常见css hack实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“常见css...
    99+
    2024-04-02
  • python中字典的常见操作实例分析
    这篇文章主要介绍了python中字典的常见操作实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中字典的常见操作实例分析文章都会有所收获,下面我们一起来看看吧。python中字典的常见操作字典添...
    99+
    2023-07-02
  • Python字符串的常用方法实例分析
    这篇文章主要介绍“Python字符串的常用方法实例分析”,在日常操作中,相信很多人在Python字符串的常用方法实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python字符串的常用方法实例分析”的疑...
    99+
    2023-06-29
  • Python爬虫抓取几个常见小问题的示例分析
    这篇文章主要介绍Python爬虫抓取几个常见小问题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4....
    99+
    2023-06-14
  • JavaScript常见的BOM操作实例分析
    这篇文章主要讲解了“JavaScript常见的BOM操作实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript常见的BOM操作实例分析”...
    99+
    2024-04-02
  • Java编程常见内存溢出异常的示例分析
    小编给大家分享一下Java编程常见内存溢出异常的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java 堆是用来存储对象实例的, 因此如果我们不断地创建对...
    99+
    2023-05-30
    java
  • 常见angular面试题实例分析
    本篇内容主要讲解“常见angular面试题实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常见angular面试题实例分析”吧!1、angular 的数据...
    99+
    2024-04-02
  • python操作XML格式文件的一些常见方法
    目录前言1. 读取文件和内容2.读取节点数据3.修改和删除节点4.构建文档 方式一ET.Element()补充:XML文件和JSON文件互转1、XML文件转为JSON文件2、JSON...
    99+
    2024-04-02
  • Oracle常见分析函数实例详解
    目录1. 认识分析函数1.1 什么是分析函数1.2 分析函数和聚合函数的不同1.3 分析函数的形式2. 理解over()函数2.1 两个order by 的执行机制2.2 分析函数中的分组、排序、窗口2.3 帮助理解ov...
    99+
    2023-04-25
    oracle分析函数用法 oracle的分析函数 oracle分析函数有哪些
  • python列表去重的5种常见方法实例
    目录前言一、使用for循环实现列表去重二、使用列表推导式去重三、使用集合转换函数set()实现列表去重四、使用新建字典方式实现列表去重五、删除列表中存在重复的数据附:Python 二...
    99+
    2024-04-02
  • python实操方法案例分析
    本篇内容介绍了“python实操方法案例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!任务1、我的咖啡馆你做主元组coffee_name...
    99+
    2023-06-29
  • Android编程中File文件常见存储与读取操作的示例分析
    这篇文章给大家分享的是有关Android编程中File文件常见存储与读取操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:MainActivity文件代码如下:package exa...
    99+
    2023-05-30
    android file
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作