解析XML文件

这篇具有很好参考价值的文章主要介绍了解析XML文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是XML?

xml指可扩展语言(extendsible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
xml被设计用来传输和存储数据。
xml是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关、语义的、结构化的标记语言的句法语言。

Python对XML的解析

常见的xml编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
Python有三种方法解析XML,SAX、DOM,以及ElementTree.

待解析的XML数据如下:

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

SAX(simple API for xml)

Python标准库包含SAX解析起,SAX用事件驱动模型,通过在解析xml的过程中出发一个个的事件并调用用户定义的回调函数来处理XML文件。

SAX是一种基于事件驱动的API。
利用SAX解析XML文档两部分:解析器、事件处理器
解析器负责读取xml文档,并向事件处理器发送事件,如元素开始、元素结束事件。
而事件处理器负责对事件做出响应,对传递的XML数据进行处理。

  • 对大型文件进行处理
  • 只需要文件的部分内容,或者从文件中得到特定信息
  • 想建立自己的对象模型的时候
    在Python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。

ContentHandler 类方法介绍

characters(content)方法

调用时机:
从行开始,遇到标签之前,存在字符,content的值为这些字符。
从一个标签,遇到下一个标签之前,存在字符,content的值为这些字符串。
从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。
标签可以是开始标签,也可以是结束标签。

startDocment()方法

文档启动的时候调用。

endDocment()方法

解析器到达文档结尾时调用。

startElement(name,attrs)方法

遇到xml开始标签时调用,name是标签的名字,attrs是标签的属性值字典。

endElement(name)方法

遇到xml结束标签时调用。

make_parser方法

创建对象解析器对象并返回。

xml.sax.make_parser( [parser_list] )

参数说明:

  • parser_list,可选参数,解析器列表

parser方法

创建一个SAX解析器并解析xml文档。

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

参数说明:

  • xmlfile,xml文件名
  • contenthandler,必须是一个ContentHandler的对象
  • errorhandler,如果指定该参数,errorhandler必须是一个SAX Errorhandler对象

parseString方法

创建一个xml解析器并解析xml字符串

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

参数说明:

  • xmlstring,xml字符串
  • contenthandler,必须是一个ContentHandler的对象
  • errorhandler,如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象

使用SAX解析XML实例

# 使用SAX解析XML
import xml.sax


class 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":
            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 = ""

    # 读取字符时调用
    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__"):
    # 创建XmlReader
    parser = xml.sax.make_parser()
    # 关闭命名空间
    parser.setFeature(xml.sax.handler.feature_namespaces, 0)

    # 重写ContextHandler
    Handler = MovieHandler()
    parser.setContentHandler(Handler)
    parser.parse("demo.xml")

使用xml.dom解析xml

文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个DOM的解析器在解析一个XML文档时,一次性读取整个文档,把文档中的所有元素保存在内存中的树形结构里,之后你可以利用DOM提供的不同函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

Python中用xml.dom.minidom来解析xml文件,实例如下:文章来源地址https://www.toymoban.com/news/detail-462991.html

# 使用xml.dom解析xml
from xml.dom.minidom import parse
import xml.dom.minidom


# 使用mindom解析起打开XML文档
DomTree = xml.dom.minidom.parse("demo.xml")
collection = DomTree.documentElement
if collection.hasAttribute('shelf'):
    print("Root element: %s" % collection.getAttribute("shelf"))

# 在集合中获取所有电影
movies = collection.getElementsByTagName("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)

到了这里,关于解析XML文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT解析xml文件

    mainwindow.cpp  mainwindow.h

    2024年02月14日
    浏览(35)
  • 解析XML文件

    什么是XML? xml指可扩展语言(extendsible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 xml被设计用来传输和存储数据。 xml是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。 它也是元标记语言,

    2024年02月06日
    浏览(52)
  • Mapper.xml文件解析

     最近在做一个分布式项目,看到xml文件原先只是上网CV,还是要搞清楚吧! 下面是一个Mybatis的SQL映射文件的配置 这个元素定义了命名空间,用于标识这个映射文件对应的接口。在这里,命名空间指向了 cn.itedus.lottery.infrastructure.dao.IActivityDao 这个接口,表示这个映射文件用

    2024年02月10日
    浏览(40)
  • java解析xml文件

    MyContentHandler类继承自DefaultHandler,是一个自定义的内容处理器。在该类中重写了startElement()、endElement()和characters()方法,以处理XML解析的不同事件。

    2024年02月13日
    浏览(46)
  • Java中解析XML文件

            XML(EXtensible Markup Language),可扩展标记语言,相比于HTML可以自定义标签,不遵循W3C标准         XML特点:跨平台、跨语言、跨系统。XML与操作系统、编程语言的开发平台无关。         XML作用:①数据交互②使用XML文件配置应用程序和网站 1.文档声明 包括文档

    2024年02月09日
    浏览(47)
  • 使用TinyXML-2解析XML文件

    当我们想要在不同的程序、系统或平台之间共享信息时,就需要一种统一的方式来组织和表示数据。XML(EXtensible Markup Language,即可扩展标记语言)是一种用于描述数据的标记语言,它让数据以一种结构化的方式呈现,使得计算机程序能够轻松理解和处理这些数据。 XML有以下

    2024年02月20日
    浏览(41)
  • Qt XML文件解析 QDomDocument

    QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢? DOM(Document Object Model):将XML文件保存为树的形式,操作简单,便于访问。 SAX(Simple API for XML):接近于底层,速度较快,但不便于访问。 如果要使用XML时,.pro文件中添加:  使用时添加文件

    2024年02月10日
    浏览(47)
  • .xml是什么文件 html的区别是什么 ?xml用什么编辑器?

    XML 在许多领域中都有广泛的应用。以下是一些常见的用途: 数据交换:XML 可以用作数据交换的标准格式。许多应用程序和系统使用 XML 来传输和共享数据,因为 XML 的结构化特性和可读性使得数据解析和处理更加方便。 配置文件:许多软件和系统使用 XML 文件来存储配置信息

    2024年01月21日
    浏览(44)
  • Qt中XML文件创建及解析

    QT的配置文件中添加xml选项: 头文件:#include QXmlStreamWriter 写入的文件如图:   头文件:#include QXmlStreamReader  解析其中的Hobby模块: 输出结果:  

    2024年02月11日
    浏览(33)
  • Spring源码(五)— 解析XML配置文件(二) 定制化标签解析流程

    上一篇以bean标签为例,介绍了属于defaultNamesapce标签的解析流程,但是defaultNamespace中默认的标签只有bean、beans、alias、import这四个,而我们平时在xml中配置的标签有很多。那其余的标签是如何解析? 在这篇文章会详细介绍定制化标签的解析流程。 注:除defaultNamesapce所属的4个

    2024年02月15日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包