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
  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/jogger/p/2760414.html
Copyright © 2011-2022 走看看