Python XML操作处理
来源:互联网 发布:手机淘宝自定义链接 编辑:程序博客网 时间:2024/06/10 15:53
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 starts def startElement(self, tag, attributes): self.CurrentData = tag if tag == "movie": print "*****Movie*****" title = attributes["title"] print "Title:", title # Call when an elements ends def endElement(self, tag): if self.CurrentData == "type": print "Type:", self.type elif self.CurrentData == "format": print "Format:", self.format elif self.CurrentData == "year": print "Year:", self.year elif self.CurrentData == "rating": print "Rating:", self.rating elif self.CurrentData == "stars": print "Stars:", self.stars elif self.CurrentData == "description": print "Description:", self.description self.CurrentData = "" # Call when a character is read def characters(self, content): if self.CurrentData == "type": self.type = content elif self.CurrentData == "format": self.format = content elif self.CurrentData == "year": self.year = content elif self.CurrentData == "rating": self.rating = content elif self.CurrentData == "stars": self.stars = content elif self.CurrentData == "description": self.description = content if ( __name__ == "__main__"): # create an XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) # override the default ContextHandler Handler = MovieHandler() parser.setContentHandler( Handler ) parser.parse("movies.xml")
这将产生以下结果:
*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDYear: 2003Rating: PGStars: 10Description: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDYear: 1989Rating: RStars: 8Description: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGStars: 10Description: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGStars: 2Description: 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 parseimport xml.dom.minidom# Open XML document using minidom parserDOMTree = xml.dom.minidom.parse("text.xml")collection = DOMTree.documentElementif collection.hasAttribute("shelf"): print "Root element : %s" % collection.getAttribute("shelf")# Get all the movies in the collectionmovies = 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].data format = movie.getElementsByTagName('format')[0] print "Format: %s" % format.childNodes[0].data rating = movie.getElementsByTagName('rating')[0] print "Rating: %s" % rating.childNodes[0].data description = movie.getElementsByTagName('description')[0] print "Description: %s" % description.childNodes[0].data
这将产生以下结果:
Root element : New Arrivals*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDRating: PGDescription: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDRating: RDescription: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGDescription: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGDescription: Viewable boredom
对DOM API文档的完整细节,请参考标准 Python DOM APIs.
- Python XML操作处理
- Python XML操作处理
- Python 处理 XML
- 使用Python处理XML
- Python处理XML
- python处理xml数据
- 使用Python处理XML
- python 处理xml
- python处理xml
- python处理xml文件
- python minidom 处理XML
- python 处理xml 笔记
- python处理XML文件
- Python处理XML
- python 处理 xml
- python处理xml(写着玩)
- python 处理xml文件
- Python处理xml文件
- 黑马程序员——Jave面向对象二
- Python多线程
- 超强、超详细Redis数据库入门教程
- LeetCode Gas Station 两个特性,两种方法完美解答-更新证明方法
- Python 扩展C
- Python XML操作处理
- Python GUI编程(Tkinter)
- 你不敢去想的事情,我做到了
- IOS开发中的UIApplication
- 八进制转化为十进制
- 迟来的课程设计之题目4——2班29号
- 【课程设计】 哈夫曼树的应用:字符串的加密与解密
- 黑马程序员——Jave IO流一
- Emacs的基本概念及基本命令