国产探花免费观看_亚洲丰满少妇自慰呻吟_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

運行結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广南县| 德庆县| 泽普县| 泽库县| 商水县| 永城市| 大同市| 伊宁县| 六盘水市| 民权县| 礼泉县| 丹东市| 永年县| 额济纳旗| 原阳县| 山东省| 深州市| 呈贡县| 桂东县| 鄱阳县| 石柱| 景洪市| 友谊县| 新宁县| 门头沟区| 德化县| 上高县| 博爱县| 文登市| 安龙县| 江华| 宁夏| 呈贡县| 息烽县| 汶上县| 武川县| 广饶县| 旺苍县| 当雄县| 汤原县| 庆元县|