Qt解析XML文件

之前对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")
                                {
                                    //剩下节点解析方式类似
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值