国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python自定義解析簡單xml格式文件的方法

2020-02-23 01:10:44
字體:
來源:轉載
供稿:網友

本文實例講述了python自定義解析簡單xml格式文件的方法。分享給大家供大家參考。具體分析如下:

因為公司內部的接口返回的字串支持2種形式:php數組,xml;結果php數組python不能直接用,而xml字符串的格式不是標準的,所以也不能用標準模塊解析。【不標準的地方是某些節點會的名稱是以數字開頭的】,所以寫個簡單的腳步來解析一下文件,用來做接口測試。

#!/usr/bin/env python#encoding: utf-8import reclass xmlparse:  def __init__(self, xmlstr):    self.xmlstr = xmlstr    self.xmldom = self.__convet2utf8()    self.xmlnodelist = []    self.xpath = ''  def __convet2utf8(self):    headstr = self.__get_head()    xmldomstr = self.xmlstr.replace(headstr, '')    if 'gbk' in headstr:       xmldomstr = xmldomstr.decode('gbk').encode('utf-8')    elif 'gb2312' in headstr:      xmldomstr = self.xmlstr.decode('gb2312').encode('utf-8')    return xmldomstr  def __get_head(self):    headpat = r'</?xml.*/?>'    headpatobj = re.compile(headpat)    headregobj = headpatobj.match(self.xmlstr)    if headregobj:      headstr = headregobj.group()      return headstr    else:      return ''  def parse(self, xpath):    self.xpath = xpath    xpatlist = []    xpatharr = self.xpath.split('/')    for xnode in xpatharr:      if xnode:        spcindex = xnode.find('[')        if spcindex > -1:          index = int(xnode[spcindex+1:-1])          xnode = xnode[:spcindex]        else:          index = 0;        temppat = ('<%s>(.*?)</%s>' % (xnode, xnode),index)        xpatlist.append(temppat)    xmlnodestr = self.xmldom    for xpat,index in xpatlist:      xmlnodelist = re.findall(xpat,xmlnodestr)      xmlnodestr = xmlnodelist[index]      if xmlnodestr.startswith(r'<![CDATA['):        xmlnodestr = xmlnodestr.replace(r'<![CDATA[','')[:-3]    self.xmlnodelist = xmlnodelist    return xmlnodestrif '__main__' == __name__:  xmlstr = '<?xml version="1.0" encoding="utf-8" standalone="yes" ?><resultObject><a><product_id>aaaaa</product_id><product_name><![CDATA[bbbbb]]></a><b><product_id>bbbbb</product_id><product_name><![CDATA[bbbbb]]></b></product_name></resultObject>'  xpath1 = '/product_id'  xpath2 = '/product_id[1]'  xpath3 = '/a/product_id'  xp = xmlparse(xmlstr)  print 'xmlstr:',xp.xmlstr  print 'xmldom:',xp.xmldom  print '------------------------------'  getstr = xp.parse(xpath1)  print 'xpath:',xp.xpath  print 'get list:',xp.xmlnodelist  print 'get string:', getstr  print '------------------------------'  getstr = xp.parse(xpath2)  print 'xpath:',xp.xpath  print 'get list:',xp.xmlnodelist  print 'get string:', getstr  print '------------------------------'  getstr = xp.parse(xpath3)  print 'xpath:',xp.xpath  print 'get list:',xp.xmlnodelist  print 'get string:', getstr

運行結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安阳市| 美姑县| 彩票| 西青区| 大邑县| 乌什县| 定兴县| 达孜县| 淮滨县| 辽源市| 贡觉县| 金坛市| 双桥区| 阜南县| 鲁甸县| 丹东市| 龙泉市| 南宁市| 临西县| 日喀则市| 沁阳市| 闸北区| 鸡东县| 泸溪县| 双流县| 东海县| 开江县| 当阳市| 鄂托克前旗| 英吉沙县| 恩施市| 左贡县| 黄大仙区| 蛟河市| 马尔康县| 平山县| 清水河县| 嘉定区| 馆陶县| 宣武区| 桃源县|