之前对XML几乎一无所知,更遑论解析之后因为工作需要做之前了解了一点
解析文件:
<resp>
<city>北京</city>
<updatetime>14:47</updatetime>
<wendu>0</wendu>
<fengli>
<![CDATA[ 3级 ]]>
</fengli>
<shidu>39%</shidu>
<fengxiang>西南风</fengxiang>
<sunrise_1>07:28</sunrise_1>
<sunset_1>16:50</sunset_1>
<sunrise_2/>
<sunset_2/>
<environment>
<aqi>94</aqi>
<pm25>70</pm25>
<suggest>极少数敏感人群应减少户外活动</suggest>
<quality>良</quality>
<MajorPollutants>颗粒物(PM2.5)</MajorPollutants>
<o3>17</o3>
<co>2</co>
<pm10>83</pm10>
<so2>21</so2>
<no2>63</no2>
<time>15:00:00</time>
</environment>
<yesterday>
<date_1>13日星期三</date_1>
<high_1>高温 0℃</high_1>
<low_1>低温 -5℃</low_1>
<day_1>
<type_1>晴</type_1>
<fx_1>东风</fx_1>
<fl_1>
<![CDATA[ <3级 ]]>
</fl_1>
</day_1>
<night_1>
<type_1>多云</type_1>
<fx_1>东南风</fx_1>
<fl_1>
<![CDATA[ <3级 ]]>
</fl_1>
</night_1>
</yesterday>
<forecast>
<weather>
<date>14日星期四</date>
<high>高温 0℃</high>
<low>低温 -4℃</low>
<day>
<type>阴</type>
<fengxiang>南风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</day>
<night>
<type>多云</type>
<fengxiang>北风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</night>
</weather>
<weather>
<date>15日星期五</date>
<high>高温 4℃</high>
<low>低温 -6℃</low>
<day>
<type>多云</type>
<fengxiang>北风</fengxiang>
<fengli>
<![CDATA[ 3-4级 ]]>
</fengli>
</day>
<night>
<type>晴</type>
<fengxiang>西北风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</night>
</weather>
<weather>
<date>16日星期六</date>
<high>高温 1℃</high>
<low>低温 -8℃</low>
<day>
<type>晴</type>
<fengxiang>西北风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</day>
<night>
<type>晴</type>
<fengxiang>西北风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</night>
</weather>
<weather>
<date>17日星期天</date>
<high>高温 5℃</high>
<low>低温 -5℃</low>
<day>
<type>晴</type>
<fengxiang>西南风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</day>
<night>
<type>晴</type>
<fengxiang>北风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</night>
</weather>
<weather>
<date>18日星期一</date>
<high>高温 6℃</high>
<low>低温 -6℃</low>
<day>
<type>晴</type>
<fengxiang>西北风</fengxiang>
<fengli>
<![CDATA[ 3-4级 ]]>
</fengli>
</day>
<night>
<type>晴</type>
<fengxiang>北风</fengxiang>
<fengli>
<![CDATA[ <3级 ]]>
</fengli>
</night>
</weather>
</forecast>
<zhishus>
<zhishu>
<name>晨练指数</name>
<value>较适宜</value>
<detail>早晨气象条件较适宜晨练,但阴天导致树林夜晚释放的二氧化碳气体不易扩散,请避免在林中晨练。</detail>
</zhishu>
<zhishu>
<name>舒适度</name>
<value>较不舒适</value>
<detail>白天天气阴沉,您会感觉偏冷,不很舒适,请注意添加衣物,以防感冒。</detail>
</zhishu>
<zhishu>
<name>穿衣指数</name>
<value>冷</value>
<detail>天气冷,建议着棉服、羽绒服、皮夹克加羊毛衫等冬季服装。年老体弱者宜着厚棉衣、冬大衣或厚羽绒服。</detail>
</zhishu>
<zhishu>
<name>感冒指数</name>
<value>较易发</value>
<detail>天气较凉,较易发生感冒,请适当增加衣服。体质较弱的朋友尤其应该注意防护。</detail>
</zhishu>
<zhishu>
<name>晾晒指数</name>
<value>不太适宜</value>
<detail>天气阴沉,不利于水分的迅速蒸发,不太适宜晾晒。若需要晾晒,请尽量选择通风的地点。</detail>
</zhishu>
<zhishu>
<name>旅游指数</name>
<value>较适宜</value>
<detail>天气较好,稍冷,较适宜旅游,您仍可陶醉于大自然的美丽风光中,出门要注意保暖哦。</detail>
</zhishu>
<zhishu>
<name>紫外线强度</name>
<value>最弱</value>
<detail>属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。</detail>
</zhishu>
<zhishu>
<name>洗车指数</name>
<value>较适宜</value>
<detail>较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。</detail>
</zhishu>
<zhishu>
<name>运动指数</name>
<value>较不宜</value>
<detail>阴天,且天气寒冷,推荐您在室内进行低强度运动;若坚持户外运动,请选择合适的运动并注意保暖。</detail>
</zhishu>
<zhishu>
<name>约会指数</name>
<value>较不适宜</value>
<detail>阴天,天气较凉,室外约会可能会让恋人们受些苦,最好在温暖的室内促膝谈心。</detail>
</zhishu>
<zhishu>
<name>雨伞指数</name>
<value>不带伞</value>
<detail>阴天,但降水概率很低,因此您在出门的时候无须带雨伞。</detail>
</zhishu>
</zhishus>
</resp>
<!--
10.10.156.163(10.10.156.163):48433 ; 10.10.162.42:8080
-->
使用#include <QDomDocument>需要在.pro文件中添加QT += xml,使用#include <QXmlStreamReader>的时候可以不添;
QDomDocument
void MainWindow::readXML()
{
QDomDocument doc;
QFile *file = new QFile(filename);
QString error = "";
int errorRow = 0;
int errorCol = 0;
if(!file->open(QFile::ReadOnly |QFile::Text))
return;
if(!doc.setContent(file, false, &error, &errorRow, &errorCol))//setContent将内容指定给QDomDocument解析
{
qDebug()<<"setContent ----- "<<error<< errorRow<< errorCol;
file->close();
return;
}
file->close();
QDomElement root = doc.documentElement();
QDomNode node = root.firstChild();
while (!node.isNull()) {
QDomElement element = node.toElement();
if(!element.isNull())
{
if(element.tagName() == "city")
qDebug()<<"MainWindow::city -------- "<<element.text();
if(element.tagName() == "updatetime")
qDebug()<<"MainWindow::updatetime -------- "<<element.text();
if(element.tagName() == "wendu")
qDebug()<<"MainWindow::wendu -------- "<<element.text();
if(element.tagName() == "fengli")
qDebug()<<"MainWindow::fengli -------- "<<element.text();
if(element.tagName() == "shidu")
qDebug()<<"MainWindow::shidu -------- "<<element.text();
if(element.tagName() == "fengxiang")
qDebug()<<"MainWindow::fengxiang -------- "<<element.text();
if(element.tagName() == "sunrise_1")
qDebug()<<"MainWindow::sunrise_1 -------- "<<element.text();
if(element.tagName() == "sunset_1")
qDebug()<<"MainWindow::sunset_1 -------- "<<element.text();
if(element.tagName() == "environment")
{
QDomNode nodeSon = element.firstChild();
while(!nodeSon.isNull())
{
QDomElement elementson = nodeSon.toElement();
if(!elementson.isNull())
{
if(elementson.tagName() == "aqi")
qDebug()<<"MainWindow::aqi -------- "<<elementson.text();
if(elementson.tagName() == "pm25")
qDebug()<<"MainWindow::pm25 -------- "<<elementson.text();
if(elementson.tagName() == "suggest")
qDebug()<<"MainWindow::suggest -------- "<<elementson.text();
if(elementson.tagName() == "quality")
qDebug()<<"MainWindow::quality -------- "<<elementson.text();
if(elementson.tagName() == "MajorPollutants")
qDebug()<<"MainWindow::MajorPollutants -------- "<<elementson.text();
if(elementson.tagName() == "o3")
qDebug()<<"MainWindow::o3 -------- "<<elementson.text();
if(elementson.tagName() == "co")
qDebug()<<"MainWindow::co -------- "<<elementson.text();
if(elementson.tagName() == "pm10")
qDebug()<<"MainWindow::pm10 -------- "<<elementson.text();
if(elementson.tagName() == "so2")
qDebug()<<"MainWindow::so2 -------- "<<elementson.text();
if(elementson.tagName() == "no2")
qDebug()<<"MainWindow::no2 -------- "<<elementson.text();
if(elementson.tagName() == "time")
qDebug()<<"MainWindow::time -------- "<<elementson.text();
//剩下的节点信息解析方式类似
}
nodeSon = nodeSon.nextSibling();
}
}
}
node = node.nextSibling();
}
return;
}
QXmlStreamReader
void MainWindow::readXML()
{
QFile *file = new QFile(filename);
if(!file->open(QFile::ReadOnly |QFile::Text))
return;
m_reader = new QXmlStreamReader(file);
while (!m_reader->atEnd() && !m_reader->hasError()) {
QXmlStreamReader::TokenType token = m_reader->readNext();
if(token == QXmlStreamReader::StartDocument)
{
continue;
}
if(m_reader->isStartElement() && m_reader->name() == "city")
{
QString city = m_reader->readElementText();
qDebug()<<"MainWindow::sltOnPushButton --------- 2222"<<city;
QString updatetime = getValue("updatetime");
qDebug()<<"MainWindow::sltOnPushButton --------- 3333"<<updatetime;
QString wendu = getValue("wendu");
qDebug()<<"MainWindow::sltOnPushButton --------- 4444"<<wendu;
QString fengli = getValue("fengli");
qDebug()<<"MainWindow::sltOnPushButton --------- 5555"<<fengli;
QString shidu = getValue("shidu");
qDebug()<<"MainWindow::sltOnPushButton --------- 6666"<<shidu;
QString fengxiang = getValue("fengxiang");
qDebug()<<"MainWindow::sltOnPushButton --------- 7777"<<fengxiang;
QString sunrise_1 = getValue("sunrise_1");
qDebug()<<"MainWindow::sltOnPushButton --------- 8888"<<sunrise_1;
QString sunset_1 = getValue("sunset_1");
qDebug()<<"MainWindow::sltOnPushButton --------- 0001"<<sunset_1;
QString aqi = getValue("aqi");
qDebug()<<"MainWindow::sltOnPushButton --------- 0002"<<aqi;
QString pm25 = getValue("pm25");
qDebug()<<"MainWindow::sltOnPushButton --------- 0003"<<pm25;
QString suggest = getValue("suggest");
qDebug()<<"MainWindow::sltOnPushButton --------- 0004"<<suggest;
QString quality = getValue("quality");
qDebug()<<"MainWindow::sltOnPushButton --------- 0005"<<quality;
QString o3 = getValue("o3");
qDebug()<<"MainWindow::sltOnPushButton --------- 0006"<<o3;
QString co = getValue("co");
qDebug()<<"MainWindow::sltOnPushButton --------- 0007"<<co;
QString pm10 = getValue("pm10");
qDebug()<<"MainWindow::sltOnPushButton --------- 0008"<<pm10;
QString so2 = getValue("so2");
qDebug()<<"MainWindow::sltOnPushButton --------- 0009"<<so2;
QString no2 = getValue("no2");
qDebug()<<"MainWindow::sltOnPushButton --------- 0010"<<no2;
QString time = getValue("time");
qDebug()<<"MainWindow::sltOnPushButton --------- 0011"<<time;
while (!m_reader->atEnd()) {
m_reader->readNext();
if(m_reader->isStartElement()&&m_reader->name() == "yesterday")
{
getYesterday();
}
}
}
}
}
QString MainWindow::getValue(const QString &name)
{
while (!m_reader->atEnd()) {
m_reader->readNext();
if(m_reader->isStartElement()&&m_reader->name() == name)
return m_reader->readElementText();
}
return"";
}
void MainWindow::getYesterday()
{
QString date_1 = getValue("date_1");
qDebug()<<"MainWindow::sltOnPushButton --------- 1002"<<date_1;
while (!m_reader->atEnd()) {
m_reader->readNext();
if(m_reader->isStartElement()&&m_reader->name() == "forecast")
{
while (!m_reader->atEnd()) {
m_reader->readNext();
if(m_reader->isStartElement()&&m_reader->name() == "weather")
{
while (!m_reader->atEnd()) {
m_reader->readNext();
if(m_reader->isStartElement()&&m_reader->name() == "zhishus")
{
while (!m_reader->atEnd()) {
m_reader->readNext();
if(m_reader->isStartElement()&&m_reader->name() == "zhishu")
{
//剩下节点解析方式类似
}
}
}
}
}
}
}
}
}