zoukankan      html  css  js  c++  java
  • python使用expat解析xml

    python有一些内建的xml解析库,本文介绍python中的expat库

    expat的特点之一就是支持动态解析xml。何为动态?就是某个xml串并不需要全部输入给expat,哪怕只是一部分,expat也能感应到响应的事件。事件?比如检测到新元素出现(实质上是expat遇到了‘<’),或者检测到某个元素处理完毕(遇到了‘/>’)。所以——expat不一定需要完整的xml就能工作。

    看程序

     1 import xml.parsers.expat
     2 
     3 class ExParser(object):
     4     '''Parse roster xml'''
     5     def __init__(self, xml_raw):
     6         '''init parser and setup handlers'''
     7         self.parser = xml.parsers.expat.ParserCreate()
     8 
     9         #connect handlers
    10         self.parser.StartElementHandler = self.start_element
    11         self.parser.EndElementHandler = self.end_element
    12         self.parser.CharacterDataHandler = self.char_data
    13         self.parser.Parse(xml_raw)
    14         del(xml_raw)
    15 
    16     def start_element(self, name, attrs):
    17         '''Start xml element handler'''
    18         print 'start:'+name
    19 
    20     def end_element(self, name):
    21         '''End xml element handler'''
    22         print 'end:'+name
    23 
    24     def char_data(self, data):
    25         '''Char xml element handler'''
    26         print 'data is '+data

    啊分析:

    7行 ExParser的构造中定义了一个expat解析器

    10-12行 为解析器设置感兴趣的回调函数

    13行 开始解析我们的xml

    然后就是等待expat解析,一旦expat解析器遇到xml的 元素开始,元素结束,元素值 事件时,会回分别调用start_element, end_element, char_data函数

    16行 参数name,attrs 分别代表节点名称,节点属性(字典)

    20行 参数name代表节点名称

    24行 参数data代表节点数据

    拿到这些值后,能做什么都可以了。

    尤其当我们遇到大块xml数据的时候,可以利用expat动态解析这一点来分块解析一个大块。

    己有能 勿自私 人所能 勿轻訾 jogger0703@gmail.com
  • 相关阅读:
    tcpdump 命令的常用选项:一
    Centos系统中 Systemd 的Unit文件配置说明
    如何使用PowerShell获取物理磁盘的信息
    tcpdump 命令的常用选项:二
    Google报告:大量被入侵的 Google Cloud 实例被用来挖掘加密货币
    Ubuntu中使用pdftk合并、分离PDF文档等操作
    tcpdump 命令的常用选项:三
    优麒麟Ubuntu Kylin 20.04 Pro SP1 上线
    为SSH登录设置电子邮件提醒
    图片上传并显示(兼容ie),图片大小判断
  • 原文地址:https://www.cnblogs.com/jogger/p/2760414.html
Copyright © 2011-2022 走看看