使用Python 解析XML文件

项目中用到SAX模块对xml文件进行解析,先贴出我们的xml文件吧,当然只是一小部分

<ORDER_INFO execute_id="58"  order_id="16"  show_sequence="default"  show_type="CPM"  >
<DATE_TIME>
<DAY id='MON'>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23</DAY>
<DAY id='TUE'>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23</DAY>
</DATE_TIME>
<AUDIENCE>
<AREA>0010</AREA>
<KEYWORD_FILES>Keywords_file/58/default.txt</KEYWORD_FILES>
<KEYSITE_FILES>Keyurl_file/58/default.txt</KEYSITE_FILES>
</AUDIENCE>

那我写的例子就是基于上述xml文件的解析;

先熟悉一下流程:

1、首先写一个xml解析的类,执行解析的全部流程,我定义为XMLPARSE;

2、make_parser生成解析器,设置解析器使用的解析方法,也就是将步骤一的解析方法置到解析器中;

3、引入文件,执行解析动作parse()

XMLParse构建:

#!/usr/bin/python
#-*- coding:utf-8 -*-

from xml.sax.handler import ContentHandler

class XMLParse(ContentHandler):
    def __init__(self):
        self.name = dict()
        self.name['ORDER_INFO'] = self._ORDERINFO
        self.name['DAY'] = self._DAY
        self.name['AREA'] = self._AREA
        self.name['KEYWORD_FILES'] = self._SEARCHORDER


    def startElement(self, name, attrs):
        self.content = ''
        if not name in self.name:
            return

        self.attrs = attrs

        if not self.name[name]():
            return False

    def characters(self, content):
        self.content = self.content +  content

    def endElement(self, name):
        try:
            if self.label == 'DAY':
                #存储操作
                   self.day = self.content
                return 
            if self.label == 'AREA':
                #存储操作
                   self.area = self.content
                return 
            if self.label == 'KEYWORD_FILES':
                #存储操作
                   self.word_file = self.content
                return 
        except Exception, e:
            return False

        return 

    def _ORDERINFO(self):
        try:
            orderid = str(self.attrs['execute_id'])
            self.tmp_eorder_id = orderid
            superid = str(self.attrs['order_id'])
            type = str(self.attrs['show_type'])
            linear = str(self.attrs['show_sequence'])
            return True
        except Exception, e:
            return False


    def _DAY(self):
        try:
            self.label = "DAY"
            self.week_id = str(self.attrs['id'])
            return True
        except Exception,e:
            return False

    def _AREA(self):
        try:
            self.label = "AREA"
            return True
        except Exception,e:
            return False


    def _SEARCHORDER(self):
        try:
            self.label = "KEYWORD_FILES"
            return True
        except Exception, e:
            return False


为了防止characters被多次执行,所以对标签内容的解析放在了endElement中进行!具体参看http://blog.csdn.net/wyjzt999/article/details/8661192

 


构造解析器:

from xml.sax import make_parser

par = make_parser()
par.setContentHandler(XMLParse())


执行解析动作:

xml_file = "/root/demo.xml"
par.parse(xml_file)


 


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值