python中xml解析sax_python:SAX解析XML

DefaultSaxHandler是没有继承自DefaultHandler,如果继承了,它内部定义的start_element、end_element、char_data就是overwrite,如果没有继承,则是属于自定义,这点没有异议吧。关键不在于它是否继承,而是在于parser是否定义了这几个函数并实现了对应的处理函数,而DefaultSaxHandler中定义的几个函数相当于回调函数,在这里并不要求它是否继承自DefaultHandler。

下面是一个非常简单的例子,目标是寻找""中间的内容,当然,这个为了简单说明怎么work的,状态机跟XML的sax解析还是有些不同的。SAX的parser的工作原理基本上类似于此,但是效率肯定比下面这个版本高,内部的状态机也比下面这个复杂,仅供参考。

class MyParser(object):

def __init__(self):

self.findValue = None

def parse(self, inputString):

state_init = -1

state_start_elem = 0

state_end_elem = 2

element_found = ""

current_state = state_init

for eachChar in inputString:

if eachChar == "

current_state = state_start_elem

element_found = ""

continue

elif eachChar == ">" and (state_start_elem == current_state):

if self.findValue and callable(self.findValue):

self.findValue(element_found)

current_state = state_end_elem

else:

element_found += eachChar

class MyHandler(object):

def HaveFindAValue(self, valueName):

print "we have found a value " + valueName

a = MyHandler()

parser = MyParser()

parser.findValue = a.HaveFindAValue

parser.parse("hello")

输出

we have found a value XML

we have found a value XML2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值