基于Dragonbaord 410c开发板的Python交互设计(3)——天气预报xml数据解析

网友投稿 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小时内删除侵权内容。

上一篇:Linux Centos7 网络扫描nmap和inode节点
下一篇:浅谈华为Cyberverse数字现实技术
相关文章

 发表评论

暂时没有评论,来抢沙发吧~