linux怎么查看本机内存大小
224
2022-11-10
基于Dragonbaord 410c开发板的Python交互设计(3)——天气预报xml数据解析
下图是天气XML数据格式,其实XML的语法非常简单,主要由标签和内容组成,标签是由起始标签和结尾标签组成,并且可以进行嵌套,这样在解析的过程中,我们通常可以通过判断是否是起始标签,然后读入数据即可,采用循环或者递归的方法都可以完成对xml的解析。
readNext():从xml输入流中读取下一个记号
name():记号的名称,即<名称>名称>
isEndElement():判断当前已读取的记号是否为结束元素,结束元素即>
readElementText():读取当前记号对应的文本值,<>文本值>
atEnd():判断是否为文件结尾
了解了这些我们就可以调用这些接口来获取标签名和判断是否是起始标签,并且可以放的读取标签文本信息。
from PyQt5 import QtWidgets, QtCore, QtXml, QtGui,QtNetwork
from mainwindow import Ui_MainWindow
import res
class getWeatherInfo(object):
def __init__(self,weatherXml):
self.weather_updateOK=0
self.weather_city=""
self.weather_wendu=""
self.weather_suggest=""
self.weather_fengli=""
self.weather_fengxiang=""
self.weather_sunrise=""
self.weather_sunset=""
self.forecast_weather_info_date=[]
self.forecast_weather_info_high=[]
self.forecast_weather_info_low=[]
self.forecast_weather_info_dtype=[]
self.forecast_weather_info_dfengxiang=[]
self.forecast_weather_info_dfengli=[]
self.forecast_weather_info_ntype=[]
self.forecast_weather_info_nfengxiang=[]
self.forecast_weather_info_nfengli=[]
#指数
self.weather_zhishu_name=[]
self.weather_zhishu_vale=[]
self.weather_zhishu_data=[]
self.prassWeatherInfo(weatherXml)
def prassWeatherInfo(self,weatherXml):
print("start prassWeatherInfo")
while not weatherXml.atEnd():
print ("error: get weather data error")
return -1
elif weatherXml.isStartElement():
if weatherXml.name()=="city":
self.weather_city = weatherXml.readElementText()
#print(city)
weatherXml.readNext()
weatherXml.readNext()
elif weatherXml.name()=="wendu":
self.weather_wendu=weatherXml.readElementText()
weatherXml.readNext()
elif weatherXml.name()=="fengli":
self.weather_fengli=weatherXml.readElementText()
weatherXml.readNext()
elif weatherXml.name()=="shidu":
self.weather_shidu=weatherXml.readElementText()
weatherXml.readNext()
elif weatherXml.name()=="fengxiang":
self.weather_fengxiang=weatherXml.readElementText()
weatherXml.readNext()
elif weatherXml.name()=="sunrise_1":
self.weather_sunrise=weatherXml.readElementText()
weatherXml.readNext()
elif weatherXml.name()=="sunset_1":
self.weather_sunset=weatherXml.readElementText()
weatherXml.readNext()
elif weatherXml.name()=="environment":
print("environment")
while not weatherXml.atEnd():
print("test")
if weatherXml.name()=="suggest":
self.weather_suggest=weatherXml.readElementText()
print("suggest")
break
else:
weatherXml.readNext()
elif weatherXml.name()=="forecast":
#print(weatherXml.readElementText())
print("forecast")
weatherXml.readNext()
while not weatherXml.atEnd():
if weatherXml.isStartElement():
if weatherXml.name()=="weather":
weatherXml.readNext()
while not weatherXml.atEnd():
if weatherXml.isStartElement():
if weatherXml.name()=="date":
#print("weather info")
date = weatherXml.readElementText()
self.forecast_weather_info_date.append(date)
weatherXml.readNext()
#print(date)
elif weatherXml.name()=="high":
high=weatherXml.readElementText()
self.forecast_weather_info_high.append(high)
weatherXml.readNext()
#print(high)
elif weatherXml.name()=="low":
low=weatherXml.readElementText()
self.forecast_weather_info_low.append(low)
weatherXml.readNext()
#print(low)
elif weatherXml.name()=="day":
#print("day info")
weatherXml.readNext()
while not weatherXml.atEnd():
if weatherXml.isStartElement():
if weatherXml.name()=="type":
type = weatherXml.readElementText()
self.forecast_weather_info_dtype.append(type)
weatherXml.readNext()
#print("type:")
#print(type)
elif weatherXml.name()=="fengxiang":
ffengxiang=weatherXml.readElementText()
self.forecast_weather_info_dfengxiang.append(ffengxiang)
weatherXml.readNext()
#print(ffengxiang)
elif weatherXml.name()=="fengli":
ffengli=weatherXml.readElementText()
print("fenli")
self.forecast_weather_info_dfengli.append(ffengli)
weatherXml.readNext()
#print(ffengli)
else:
weatherXml.readNext()
#break
else:
weatherXml.readNext()
break
elif weatherXml.name()=="night":
#print("night info:")
weatherXml.readNext()
while not weatherXml.atEnd():
if weatherXml.isStartElement():
if weatherXml.name()=="type":
ntype=weatherXml.readElementText()
self.forecast_weather_info_ntype.append(ntype)
weatherXml.readNext()
#print(ntype)
elif weatherXml.name()=="fengxiang":
nfengxiang=weatherXml.readElementText()
self.forecast_weather_info_nfengxiang.append(nfengxiang)
weatherXml.readNext()
#print(nfengxiang)
elif weatherXml.name()=="fengli":
nfengli=weatherXml.readElementText()
print("nfenli")
self.forecast_weather_info_nfengli.append(nfengli)
weatherXml.readNext()
#print(nfengli)
else:
weatherXml.readNext()
#break
else:
weatherXml.readNext()
break
else:
weatherXml.readNext()
else:
weatherXml.readNext()
break
else:
weatherXml.readNext()
else:
weatherXml.readNext()
break
elif weatherXml.name()=="zhishus":
#print("zhishus:")
weatherXml.readNext()
while not weatherXml.atEnd():
if weatherXml.isStartElement():
if weatherXml.name()=="zhishu":
print("zhishu2:")
weatherXml.readNext()
while not weatherXml.atEnd():
if weatherXml.isStartElement():
if weatherXml.name()=="name":
self.weather_zhishu_name.append(weatherXml.readElementText())
#print("name")
#print(self.weather_zhishu_name)
weatherXml.readNext()
elif weatherXml.name()=="value":
self.weather_zhishu_vale.append(weatherXml.readElementText())
#print("value")
weatherXml.readNext()
elif weatherXml.name()=="detail":
self.weather_zhishu_data.append(weatherXml.readElementText())
#print("detail")
#print(weatherXml.readElementText())
weatherXml.readNext()
else:
weatherXml.readNext()
else:
weatherXml.readNext()
break
else:
weatherXml.readNext()
else:
weatherXml.readNext()
break
else:
weatherXml.readNext()
else:
weatherXml.readNext()
weatherXml.clear()
self.updateOK=1
for i in range(0,5):
print(self.weather_zhishu_name[i])
print(self.weather_zhishu_vale[i])
print(self.weather_zhishu_data[i])
def updateOK(self):
return self.updateOK
通过调用该类就可以实现对xml文件中个的天气数据的解析,并且通过访问类成员就可以获取相应的天气信息。
如下图所示,是调用该类解析得到的天气指数数据:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~