Python中使用SAX解析XML及例項

2021-08-06 02:19:19 字數 3309 閱讀 7049

sax解析xml速度快、占用記憶體小。我們只需要關注三個事件:start_element、end_element、char_data。如:當sax在解析乙個節點時python

會產生三個事件:

2.1start_element事件,分別讀取

2.2end_element事件,分別讀取

2.3char_data事件、讀取python補充二維字典知識:

3.1 定義二維字典 :dict_2d = , 'b': }

3.2 訪問二維字典:dict_2d['a']['a'],結果明顯是:1

3.3 新增二維字典中屬性時可以用乙個函式來完成:

#二維字典的新增函式

defaddtwodimdict

(thedict, key_a, key_b, val):

if key_a in adic:

thedict[key_a].update()

else:

thedict.update(})

4. 例項:請利用sax編寫程式解析yahoo的xml格式的天氣預報,獲取當天和第二天的天氣:

#!/uer/bin/env python

#-*- coding:utf-8 -*-

#使用sax解析xml

#查詢yahoo天氣的今天和明天天氣

#宣告from xml.parsers.expat import parsercreate

#定義天氣字典、天數

weather_dict = {}

which_day = 0

#定**析類

#包括三個主要函式:start_element(),end_element(),char_data()

class

weathersaxhandler

(object):

#定義start_element函式

defstart_element

(self,name,attrs):

global weather_dict,which_day

#判斷並獲取xml文件中地理位置資訊

if name == 'yweather:location':

#將本行xml**中'city'屬性值賦予字典weather_dict中的'city'

weather_dict['city']=attrs['city']

weather_dict['country']=attrs['country']#執行結束後此時,weather_dict=

#同理獲取天氣**資訊

if name == 'yweather:forecast':

which_day +=1

#第一天天氣,獲取氣溫、天氣

if which_day == 1:

weather =

weather_dict['today']=weather#此時weather_dict出現二維字典

#weather_dict=}

#第二天相關資訊

elif which_day==2:

weather=

weather_dict['tomorrow']=weather

#weather_dict=, 'tomorrow': }

#end_element函式

defend_element

(self,name):

pass

#char_data函式

defchar_data

(self,text):

pass

defparse_weather

(xml):

handler = weathersaxhandler()

parser = parsercreate()

parser.startelementhandler = handler.start_element

parser.endelementhandler = handler.end_element

parser.characterdatahandler = handler.char_data

parser.parse(xml)

return weather_dict

#xml文件,輸出結果的資料**

#將xml文件賦值給data

data = r'''<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

yahoo! weather - beijing, cn

wed, 27 may 2015 11:00 am cst

39.91

116.39

wed, 27 may 2015 11:00 am cst

'''#例項化類

weather = parse_weather(data)

#檢查條件是否為true

assert weather['city'] == 'beijing', weather['city']

assert weather['country'] == 'china', weather['country']

assert weather['today']['text'] == 'partly cloudy', weather['today']['text']

assert weather['today']['low'] == 20, weather['today']['low']

assert weather['today']['high'] == 33, weather['today']['high']

assert weather['tomorrow']['text'] == 'sunny', weather['tomorrow']['text']

assert weather['tomorrow']['low'] == 21, weather['tomorrow']['low']

assert weather['tomorrow']['high'] == 34, weather['tomorrow']['high']

#列印到螢幕

print('weather:', str(weather))

5. 通過本節的學習,對python中sax對xml的解析有了簡單的了解,為以後爬蟲學習做準備。

python使用sax實現xml解析

之前在使用xml解析的時候,在網上搜了很多教程,最終沒有能按照網上的教程實現需求。所以呢,只好自己去看原始碼,在sax的 init py下看到這麼一段 1 def parse source,handler,errorhandler errorhandler 2 parser make parser ...

使用SAX解析xml檔案

解析xml檔案有好幾種方法,包括有 dom jdom sax解析 demo4j 等等 本篇主要講解sax是如何解析xml檔案的。專案結構如下 新建乙個parserutil類,繼承自defaulthandler,並重寫五個方法 startdocument startelement characters...

使用jaxp的sax方式解析xml

步驟 建立解析器工廠 根據解析器工廠建立解析器 執行parse操作 建立乙個類,繼承defaulthandler 重寫類中的方法 下述 實現了通過sax,獲取xml中所有name標籤的text屬性 public class saxtest 4 建立乙個類,繼承defaulthan class myd...