PythonXML文件解析

SAX解析xml

SAX是一种基于事件驱动的API。

利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。

解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;

而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。

适于处理下面的问题:
  • 1、对大型文件进行处理;
  • 2、只需要文件的部分内容,或者只需从文件中得到特定信息。
  • 3、想建立自己的对象模型的时候。

在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。

ContentHandler类方法介绍

  1. characters(content)方法

            调用时机:

                从行开始,遇到标签之前,存在字符,content的值为这些字符串。

                从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。

                从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。

                标签可以是开始标签,也可以是结束标签。

       2、startDocument()方法

            文档启动的时候调用。

       3、endDocument()方法

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

       4startElement(name, attrs)方法

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

       5endElement(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方法

parseString方法创建一个XML解析器并解析xml字符串:

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

参数说明:

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

使用xml.dom解析xml

文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。

一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

python中用xml.dom.minidom来解析xml文件,实例如下:

from xml.dom.minidom import parse

DOMTree=parse("XMLDemo.xml")
conn=DOMTree.getElementsByTagName("movie")
for i in conn:
    title=i.getAttribute("title")
    print("================%s================"%title)
    print("电影类型:",i.getElementsByTagName("type")[0].childNodes[0].data)
    print("电影格式:",i.getElementsByTagName("format")[0].childNodes[0].data)
    if i.hasAttribute("year"):
        print("电影发行年份:",i.getElementsByTagName("year")[0].childNodes[0].data)
    print("电影rating:",i.getElementsByTagName("rating")[0].childNodes[0].data)
    print("电影评星:",i.getElementsByTagName("stars")[0].childNodes[0].data)
    print("电影description:",i.getElementsByTagName("description")[0].childNodes[0].data)
    print("===================END====================")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值