xml程式分析

2021-08-10 06:26:37 字數 2731 閱讀 7605

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

背景知識:handler是處理器。parser是解析器。parser負責讀xml,handler負責處理parser讀出的資訊。

以下是別人的程式和自己的分析

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

from xml.parsers.expat import parsercreate

class

weathersaxhandler

(object):

def__init__

(self):

#定義了乙個字典,裝資料

self._data = {}

#定義_daycount來控制輸出今天和明天的天氣。這個要結合後面**體會,很有意思。

self._daycount = 0

@property

defdata

(self):

return self._data

#分析xml,我們想要的資訊都在start_element裡。

defstart_element

(self, name, attrs):

#如果name為'yweather:location',就把attrs['city']的值給self._data['city']

if name == 'yweather:location':

self._data['city'] = attrs['city']

self._data['country'] = attrs['country']

elif name == 'yweather:forecast':

if self._daycount == 0:

self._data['today'] = {}

self._data['today']['text'] = attrs['text']

self._data['today']['low'] = int(attrs['low'])

self._data['today']['high'] = int(attrs['high'])

self._daycount += 1

elif self._daycount == 1:

self._data['tomorrow'] = {}

self._data['tomorrow']['text'] = attrs['text']

self._data['tomorrow']['low'] = int(attrs['low'])

self._data['tomorrow']['high'] = int(attrs['high'])

self._daycount += 1

defend_element

(self, name):

pass

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)

#因為前面用了@property,所以這裡用handler.data就可以。

return handler.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)

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))

Java解析xml技術分析

在平時工作中,難免會遇到把 xml 作為資料儲存格式。面對目前種類繁多的解決方案,哪個最適合我們呢?在這篇文章中,我對這四種主流方案做乙個不完全評測,僅僅針對遍歷 xml 這塊來測試,因為遍歷 xml 是工作中使用最多的 至少我認為 預 備 測試環境 amd 毒龍1.4g oc 1.5g 256m ...

Java解析xml技術分析

在平時工作中,難免會遇到把 xml 作為資料儲存格式。面對目前種類繁多的解決方案,哪個最適合我們呢?在這篇文章中,我對這四種主流方案做乙個不完全評測,僅僅針對遍歷 xml 這塊來測試,因為遍歷 xml 是工作中使用最多的 至少我認為 預 備 測試環境 amd 毒龍1.4g oc 1.5g 256m ...

C 對於xml操作分析

xml檔案是樹狀結構。其基本組成是 節點,節點屬性,節點值,文件宣告。xml用來存放資料,樹狀格式化後的資料。對於資料操作,無非增刪查改。也就是必然存在特定函式,對xml檔案的節點,節點屬性,節點值進行增刪查改。不同的語言,對應不同的函式名字。但無論進行哪方面的增刪改,第一步都是要找到那個節點,或節...