Python XML操作处理
Python XML操作处理
什么是XML ?
可扩展标记语言(XML)是一个很象HTML或SGML的标记语言。这是建议由万维网联盟作为一个开放的标准.
XML是一种便携式的,开源的语言,它允许程序员开发可以由其他应用程序读取的应用,无论操作系统和/或发展语言.
XML是非常有用的,为保持跟踪小到中量的数据,而不需要一个基于SQL的的支柱.
XML分析器体系结构和API:
Python标准库提供了一个最小的接口,但有用的一套使用XML.
两个最基本和最广泛使用的API,XML数据是SAX和DOM接口.
Simple API for XML (SAX) : 在这里你感兴趣的事件注册回调,然后让通过的文件进行的解析器。当您的文件是大型或你有内存限制,这是非常有用的,它解析的文件,因为它从磁盘读取整个文件没有存储在内存中.
Document Object Model (DOM) API : 这是万维网联盟的建议,其中将整个文件读入内存,并存储在一个层次(树状)的形式表示XML文档的所有功能.
SAX的,显然不能作为DOM快速处理的信息可以与大文件时的工作。另一方面,使用DOM完全可以真的操作你的资源,特别是如果使用大量小文件.
SAX是只读,而DOM允许修改XML文件。由于这两种不同的API的字面相辅相成,没有任何理由,你为什么不能使用大型项目.
为我们所有的XML代码例子,让我们用一个简单的XML文件movies.xml作为输入:
War, ThrillerDVD2003PG10Talk about a US-Japan warAnime, Science FictionDVD1989R8A schientific fictionAnime, ActionDVD4PG10Vash the Stampede!ComedyVHSPG2Viewable boredom
用SAX API的解析XML:
SAX是一种事件驱动的解析XML的标准接口。使用SAX解析XML的一般要求你通过继承xml.sax.ContentHandler创建自己的ContentHandler,.
您的ContentHandler的处理你的味道,特别是标签和属性的XML(S)。一个ContentHandler对象提供的方法来处理各种解析事件。其拥有的解析器调用ContentHandler方法,因为它解析XML文件.
startDocument和endDocument的方法被称为在开始和结束的XML文件。通过参数文本的方法字符(文本)通过XML文件中的字符数据.
ContentHandler是在每个元素的开始和结束。如果分析器不能在命名空间的模式,方法的startElement(标签,属性)和endElement(标签)被称为否则,相应方法startElementNS和endElementNS的被称为。在这里,标签元素的标签,和属性是一个属性对象.
在这里,还有其他重要的方法来了解,然后再进行:
make_parser 方法:
下面的方法创建一个新的解析器对象,并返回它。创建解析器对象将是第一个解析器类型系统发现.
xml.sax.make_parser( [parser_list] )
下面是详细的参数:
parser_list: 可选的参数组成的解析器使用,都必须实施make_parser方法.
parse 方法:
下面的方法创建一个SAX解析器和使用它来解析文档.
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
下面是详细的参数:
xmlfile: 这是读取XML文件的名称.
contenthandler: 这必须是一个ContentHandler对象.
errorhandler: 如果指定的ErrorHandler必须是一个SAX ErrorHandler对象.
parseString 方法:
还有一个方法创建一个SAX解析器来解析指定的XML字符串.
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
下面是详细的参数:
xmlstring: 这是读取XML字符串的名称.
contenthandler: 这必须是一个ContentHandler对象.
errorhandler: 如果指定的ErrorHandler必须是一个SAX ErrorHandler对象.
例子:
#!/usr/bin/pythonimport xml.saxclass MovieHandler( xml.sax.ContentHandler ):def __init__(self):self.CurrentData = ""self.type = ""self.format = ""self.year = ""self.rating = ""self.stars = ""self.description = ""# Call when an element startsdef startElement(self, tag, attributes):self.CurrentData = tagif tag == "movie":print "*****Movie*****"title = attributes["title"]print "Title:", title# Call when an elements endsdef endElement(self, tag):if self.CurrentData == "type":print "Type:", self.typeelif self.CurrentData == "format":print "Format:", self.formatelif self.CurrentData == "year":print "Year:", self.yearelif self.CurrentData == "rating":print "Rating:", self.ratingelif self.CurrentData == "stars":print "Stars:", self.starselif self.CurrentData == "description":print "Description:", self.descriptionself.CurrentData = ""# Call when a character is readdef characters(self, content):if self.CurrentData == "type":self.type = contentelif self.CurrentData == "format":self.format = contentelif self.CurrentData == "year":self.year = contentelif self.CurrentData == "rating":self.rating = contentelif self.CurrentData == "stars":self.stars = contentelif self.CurrentData == "description":self.description = contentif ( __name__ == "__main__"):# create an XMLReaderparser = xml.sax.make_parser()# turn off namepsacesparser.setFeature(xml.sax.handler.feature_namespaces, 0)# override the default ContextHandlerHandler = MovieHandler()parser.setContentHandler( Handler )parser.parse("movies.xml")
这将产生以下结果:
*****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Year: 2003 Rating: PG Stars: 10 Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Year: 1989 Rating: R Stars: 8 Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Stars: 10 Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Stars: 2 Description: Viewable boredom
对于一个SAX API文档的完整细节,请参考标准 Python SAX APIs.
XML的DOM API解析:
文档对象模型,或“DOM中,”是一个由万维网联盟(W3C)的跨语言的API,用于访问和修改XML文档.
DOM是随机存取的应用极为有用。 SAX只允许你的时间在一个文件的位的看法。如果你正在寻找一个SAX元素,你有没有到另一个接入.
这是最简单的方法快速加载一个XML文件,并创建一个minidom使用xml.dom中的模块对象。的minidom对象提供了一个简单的解析器的方法,很快就会从XML文件创建一个DOM树.
示例短语调用parse( file [,parser] )函数 minidom对象来解析XML文件的文件指定到一个DOM树对象.
#!/usr/bin/pythonfrom xml.dom.minidom import parse import xml.dom.minidom# Open XML document using minidom parser DOMTree = xml.dom.minidom.parse("text.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"):print "Root element : %s" % collection.getAttribute("shelf")# Get all the movies in the collection movies = collection.getElementsByTagName("movie")# Print detail of each movie. for movie in movies:print "*****Movie*****"if movie.hasAttribute("title"):print "Title: %s" % movie.getAttribute("title")type = movie.getElementsByTagName('type')[0]print "Type: %s" % type.childNodes[0].dataformat = movie.getElementsByTagName('format')[0]print "Format: %s" % format.childNodes[0].datarating = movie.getElementsByTagName('rating')[0]print "Rating: %s" % rating.childNodes[0].datadescription = movie.getElementsByTagName('description')[0]print "Description: %s" % description.childNodes[0].data
这将产生以下结果:
Root element : New Arrivals *****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Rating: PG Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Rating: R Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Description: Viewable boredom
对DOM API文档的完整细节,请参考标准 Python DOM APIs.
Python XML操作处理相关推荐
- python读取xml编码gb2312_【转】python XML 操作总结(创建、保存和删除,支持utf-8和gb2312)...
最近写程序需要用到xml操作,看了看python.org上面的几个xml类库,还是一头雾水,感觉太学术化了,都那么吝惜写几个例子.所以自己整理了一下,算是个小总结,和大家分享一下吧. 对于简单的操作x ...
- python对XML 操作
python对XML 操作 一.XML的读取. 在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容.在缺省情况下都是用XML格式保存的.下面我讲述一下,如何使用minidom来 ...
- python:操作文档——TXT篇
python:操作文档--TXT篇 一.前言: 文档操作是任何web应用程序的组成部分,我们可以将一些保密级别不高的数据存储在文档中,这样就使得数据永久保存,而不是像全局变量一样,当程序结束后自动 ...
- Python文件操作-文本文件、二进制文件、csv文件的读取写入、OS、shutil、CSV模块、常用字符编码
Python文件操作 文本文件和二进制文件 文件操作相关模块 open()创建文件对象 文件对象的常用属性和方法 pickle 序列化 文本文件读取和写入 文本文件写入步骤 write()/write ...
- Python xml 读取之 ET.parse
Python xml 读取之 ET.parse 前一篇写到了xml 读取方法(一)dom.minidom,本次再介绍一种方法:ET.parse. 常用操作: tree = ET.parse(xml_p ...
- python xml第三方库_Python-XML库
0 前言 XML即可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者. Python-基础篇 ...
- Python文件操作相关的知识笔记总结
python文件操作相关知识 1.文件操作 路径相关 上下文管理 文件的打开模式 文件操作的常见功能 学前知识背景回顾: 字符串类型(str):程序中表示文字信息,本质是unicode编码中的二进制. ...
- OpenCV和Python动手操作计算机视觉学习教程
使用OpenCV和Python进行实际操作 面向初学者的OpenCV Python动手操作计算机视觉 你会学到: NumPy基础知识 基于OpenCV的人脸检测 使用OpenCV在图像和视频上绘制形状 ...
- python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】
本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...
最新文章
- 自动语音识别(ASR)自监督方法研究综述
- 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
- ECSHOP中transport.js和jquery的冲突的简单解决办法
- 服务器关闭重启后客户端socket能自动连接吗_用Python 撸一个 Web 服务器
- 9.23 基础知识
- Redis4.0之持久化存储
- [leetcode]187. Repeated DNA Sequences寻找DNA中重复出现的子串
- 叉积(向量积、外积)的运算法则及其与点积(数量积、内积)的混合运算
- win10怎样将桌面上回收站快捷键图标隐藏或显示
- Python 实现多个Excel工作表绘制曲线图
- 【C语言】指针进阶第五站,函数指针
- Maxscript基本数据类型(二):Name
- 微信公众号获取的实时坐标和高德地图坐标系的转换
- SQL 增加或删除一列
- 为了反击爬虫,前端工程师的脑洞可以有多大?
- 期刊分类—CSSCI、A类、B类、C类、核心期刊的区别
- python使用大数据-使用Python进行大数据分析
- How to modify comment and attribute ClearCase
- 双系统删除Linux引导(MbrFix.exe)
- 弹性工作制让企业留得住人