加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml数据处理--sax模块使用

发布时间:2020-12-15 22:50:21 所属栏目:百科 来源:网络整理
导读:1.xml文件的数据如下: PERSONShaha person id100000/id sex男/sex address北京,海淀区/address fansNum437/fansNum summary1989/summary wbNum333/wbNum gzNum242/gzNum blognull/blog edu大学/edu work/work renZh1/renZh brithday2月14日/brithday /pers

1.xml文件的数据如下:

<PERSONS>
<haha>
 <person>
     <id>100000</id>
     <sex>男</sex>
     <address>北京,海淀区</address>
     <fansNum>437</fansNum>
     <summary>1989</summary>
     <wbNum>333</wbNum>
     <gzNum>242</gzNum>
     <blog>null</blog>
     <edu>大学</edu>
     <work></work>
     <renZh>1</renZh>
     <brithday>2月14日</brithday>
 </person>
 <person>
     <id>100001</id>
     <sex>男</sex>
     <address>北京,海淀区</address>
     <fansNum>427</fansNum>
     <summary>1991</summary>
     <wbNum>333</wbNum>
     <gzNum>242</gzNum>
     <blog>null</blog>
     <edu>大学</edu>
     <work></work>
     <renZh>1</renZh>
     <brithday>3月14日</brithday>
 </person>
</haha>
</PERSONS>


现要将个人数据保存到文件,使用sax模块进行处理,代码如下。

# coding: utf-8
import sys,os
reload(sys)
sys.setdefaultencoding('utf-8')
from xml.sax import handler,parseString
class PersonHandler(handler.ContentHandler):
    def __init__(self,fp):
        self.fp = fp
        self.person = []
        self.current_tag = ""
        self.flag = 0
    def startElement(self,name,attr):
        if name == "person":
            self.person = []
        self.current_tag = name
        self.flag = 1
    def endElement(self,name):
        if name == "person":
            for value in self.person:
                if value.keys()[0] != 'person':
                    print >>self.fp,value.keys()[0]+":"+str(value.values()[0])+"|",print >>self.fp
        self.flag = 0
    def characters(self,content):
        if self.flag:
            self.person.append({self.current_tag: content})
if __name__ == "__main__":
    f = open("1.xml")
    fp = open('data','w')
    parseString(f.read(),PersonHandler(fp))
    f.close()
    fp.close()

xml.sax中主要有两个函数用来处理xml。
parse(source,handler,errorHandler=<xml.sax.handler.ErrorHandler instance>)

source:file object、file-like object。

handler:ContentHandler、child class for ContentHandler。

parseString(string,errorHandler=<xml.sax.handler.ErrorHandler instance>)

区别:区别主要在于数据的来源,第一个函数数据来源于IO数据流,第二个函数来源于字符串。

xml.sax默认的handler是ContentHandler,这个handler包含了事件回调器。一般会对这个类的回调器进行重写来进行数据处理。

expat的解析过程与sax类似,稍后会有关于expat的使用方法介绍,你会发现用法非常

相似。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读