练习
Topic sourcefrom xml.parsers.expat import ParserCreate
class WeatherSaxHandler(object):
def __init__(self):
self._weathers=[]
def start_element(self,name,attrs):
if name=='yweather:location':
self._city=attrs['city']
self._country=attrs['country']
elif name=='yweather:condition':
self._today=attrs['date'].split(',')[0]
print(self._today)
elif name=='yweather:forecast':
if len(self._weathers)==0:
if attrs['day']==self._today:
self._weathers=[]
aweather={}
aweather['text']=attrs['text']
aweather['high']=attrs['high']
aweather['low']=attrs['low']
self._weathers.append(aweather)
def parse_weather(xml):
handler=WeatherSaxHandler()
parser = ParserCreate()
parser.StartElementHandler=handler.start_element
parser.Parse(xml)
return {
'city':handler._city,
'contry':handler._country,
'today':{
'text': handler._weathers[0]['text'],
'low': handler._weathers[0]['high'],
'high': handler._weathers[0]['low']
},
'tomorrow':{
'text': handler._weathers[1]['text'],
'low': handler._weathers[1]['high'],
'high': handler._weathers[1]['low']
}
}
参考楼主的程序,发现当今天不是WED时,程序错了。更改此处bug。 from xml.parsers.expat import ParserCreate
class WeatherSaxHandler(object): def init(self): self._weathers=[] self.record=False;
def start_element(self,name,attrs):
if name=='yweather:location':
self._city=attrs['city']
self._country=attrs['country']
elif name=='yweather:condition':
self._today=attrs['date'].split(',')[0]
elif name=='yweather:forecast':
if attrs['day']==self._today:
self.record=True;
if(self.record):
self._weathers.append(attrs)
def end_element(self,name):
pass
def char_data(self,text):
pass
def get_weather(xml):
handler=WeatherSaxHandler()
parser=ParserCreate()
parser.StartElementHandler=handler.start_element
parser.Parse(xml)
return{
'city':handler._city,
'country':handler._country,
'today':{
'low':handler._weathers[0]['low'],
'high':handler._weathers[0]['high'],
'text':handler._weathers[0]['text']
},
'tomorrow':{
'low':handler._weathers[1]['low'],
'high':handler._weathers[1]['high'],
'text':handler._weathers[1]['text']
}
}
def main():
print(get_weather(xml))
if name=='main': main()
- 1
meiji5750_fce572