亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python
Python - XML 处理

上一页下一页

XML 是一种可移植的开源语言,允许程序员开发可由其他应用程序读取的应用程序,而无需考虑操作系统和/或开发语言。

什么是 XML?

可扩展标记语言 (XML) 是一种标记语言,很像 HTML 或 SGML。这是万维网联盟推荐的,可作为开放标准使用。

XML 对于跟踪中小量数据非常有用,而无需基于 SQL 的主干。

XML 解析器架构和 API

Python 标准库提供了一组最少但有用的接口来处理 XML。

XML 数据的两个最基本和最广泛使用的 API 是 SAX 和 DOM 接口。

  • XML 的简单 API (SAX) - 在这里,您为感兴趣的事件注册回调,然后让解析器继续处理文档。当您的文档很大或您有内存限制时,这很有用,它会在从磁盘读取文件时解析文件,并且从不将整个文件存储在内存中。

  • 文档对象模型 (DOM) API − 这是万维网联盟的建议,其中将整个文件读入内存并以分层(基于树的)形式存储,以表示 XML 文档的所有特征。

在处理大文件时,SAX 显然不能像 DOM 那样快地处理信息。另一方面,单独使用 DOM 确实会扼杀您的资源,尤其是在大量小文件上使用时。

SAX 是只读的,而 DOM 允许更改 XML 文件。由于这两种不同的 API 确实是互补的,因此您没有理由不能在大型项目中同时使用它们。

对于我们所有的 XML 代码示例,让我们使用一个简单的 XML 文件 movies.xml 作为输入 -

 War, Thriller DVD 2003 PG 10 谈美日战争 动漫、科幻 DVD 1989 R 8 一部科幻小说  动漫、动作 DVD 4 PG 10 Vash the Stampede! 喜剧 VHS PG  2 观看无聊

使用 SAX API 解析 XML

SAX 是用于事件驱动的 XML 解析的标准接口。使用 SAX 解析 XML 通常需要您通过子类化 xml.sax.ContentHandler 来创建自己的 ContentHandler。

你的 ContentHandler 处理 XML 风格的特定标签和属性。 ContentHandler 对象提供处理各种解析事件的方法。它拥有的解析器在解析 XML 文件时调用 ContentHandler 方法。

方法 startDocumentendDocument 在 XML 文件的开头和结尾调用。方法 characters(text) 通过参数text传递XML文件的字符数据。

ContentHandler 在每个元素的开始和结束时被调用。如果解析器不在命名空间模式下,方法 startElement(tag, attributes)endElement(tag) 被称为;否则,对应的方法startElementNSendElementNS 被称为。这里,tag是元素标签,attributes是一个Attributes对象。

以下是在继续之前需要了解的其他重要方法 -

make_parser 方法

以下方法创建一个新的解析器对象并返回它。创建的解析器对象将是系统找到的第一个解析器类型。

xml.sax.make_parser( [parser_list] )

这是参数的详细信息 -

  • 解析器列表 - 可选参数,由要使用的解析器列表组成,这些解析器必须全部实现 make_parser 方法。

解析 方法

以下方法创建一个 SAX 解析器并使用它来解析文档。

xml.sax.parse(xmlfile, contenthandler[, errorhandler])

这是参数的详细信息 -

  • xml 文件 − 这是要读取的 XML 文件的名称。

  • 内容处理程序 - 这必须是一个 ContentHandler 对象。

  • 错误处理程序 − 如果指定,errorhandler 必须是 SAX ErrorHandler 对象。

parseString 方法

还有一种方法可以创建 SAX 解析器并解析指定的 XML 字符串 .

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

这是参数的详细信息 -

  • xmlstring - 这是要读取的 XML 字符串的名称。

  • 内容处理程序 - 这必须是一个 ContentHandler 对象。

  • 错误处理程序 − 如果指定,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 ="" # 元素开始时调用 def startElement(self, tag, attributes) :self.CurrentData =tag if tag =="movie":print "*****Movie*****" title =attributes["title"] print "Title:", title # 元素结束时调用 def endElement(self, tag):if self.CurrentData =="type":打印 "Type:", self.type elif self.CurrentData =="format":打印 "Format:", self.format elif self.CurrentData =="year":打印 "Year:", self.year elif self.CurrentData =="rating":打印 "Rating:", self.rating elif self.CurrentData =="stars":打印 "Stars:", self .stars elif self.CurrentData =="description":print "Description:", self.description self.CurrentData ="" # 读取字符时调用 def characters(self, content):if self.Cu rrentData =="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__"):# 创建一个XMLReader parser =xml.sax.make_parser() # 关闭namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 覆盖默认的ContextHandler Handler =MovieHandler() parser.setContentHandler( Handler ) parser.parse("movies .xml")

这将产生以下结果 -

*****电影*****标题:背后的敌人类型:战争,惊悚片格式:DVD年份:2003评级:PGStars:10描述:谈论美日战争*****电影*****标题:变形金刚类型:动漫、科幻格式:DVD 年份:1989 评级:RStars:8 描述:科幻小说*****电影******标题:Trigun 类型:动漫,动作格式:DVD 评级:PGStars:10 描述: Vash the Stampede!*****电影*****标题:伊什塔尔类型:喜剧格式:VHS评级:PGStars:2描述:可观看的无聊

有关 SAX API 文档的完整详细信息,请参阅标准 Python SAX API。

使用 DOM API 解析 XML

文档对象模型 (“DOM”) 是来自万维网联盟 (W3C) 的跨语言 API,用于访问和修改 XML 文档。

DOM 对于随机访问应用程序非常有用。 SAX 一次只允许您查看文档的一部分。如果您正在查看一个 SAX 元素,则无法访问另一个。

这是使用 xml.dom 模块快速加载 XML 文档和创建 minidom 对象的最简单方法。 minidom 对象提供了一个简单的解析器方法,可以从 XML 文件中快速创建 DOM 树。

示例语句调用minidom对象的parse(file [,parser])函数将file指定的XML文件解析为DOM树对象。

#!/usr/bin/pythonfrom xml.dom.minidom import parseimport xml.dom.minidom# 使用 minidom parserDOMTree =xml.dom.minidom.parse("movies.xml" )collection =DOMTree.documentElementif collection.hasAttribute("shelf"):print "Root element :%s" % collection.getAttribute("shelf")#获取集合中的所有电影movies =collection.getElementsByTagName("movie")#打印每个电影的详细信息。对于电影中的电影:打印“*****电影*****” if movie.hasAttribute("title"):打印 "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] ] 打印“描述:%s”% description.childNodes[0].data

这将产生以下结果 -

根元素:新来者*****电影*****标题:背后的敌人类型:战争,惊悚片格式:DVD评级:PG描述:谈论美日战争*****电影*****标题:变形金刚类型:动漫、科幻格式:DVD 评级:RDescription:科学小说*****电影********标题:TrigunType:动漫、动作格式:DVD 评级:PG 描述:Vash the Stampede!* ****电影********标题:伊什塔尔类型:喜剧格式:VHS评级:PG描述:无聊可见

有关 DOM API 文档的完整详细信息,请参阅标准 Python DOM API。


Python

  1. Python - 列表
  2. Django 初学者教程:功能、架构和历史
  3. Python for Loop
  4. Python - 概述
  5. Python List count() 与EXAMPLES
  6. Python 检查文件是否存在 |如何检查 Python 中是否存在目录