2017-01-05 8 views
0

TinyXMLを使用してXMLデータを読みたいと思っています。どのように私は 'シンボル' のすべてを、これを変更することができます。TinyXMLを使用してXMLファイルからすべてのデータを読み取る方法

<weatherdata> 
 
\t <location> 
 
\t \t <name>Vlaardingen</name> 
 
\t \t <type/> 
 
\t \t <country>NL</country> 
 
\t \t <timezone/> 
 
\t \t <location altitude="0" 
 
\t \t \t \t latitude="51.912498" 
 
\t \t \t \t longitude="4.34167" 
 
\t \t \t \t geobase="geonames" 
 
\t \t \t \t geobaseid="2745467"/> 
 
\t </location> 
 
\t <credit/> 
 
\t <meta> 
 
\t \t <lastupdate/> 
 
\t \t <calctime>0.0152</calctime> 
 
\t \t <nextupdate/> 
 
\t </meta> 
 
\t <sun rise="2016-02-23T06:40:58" 
 
\t \t \t set="2016-02-23T17:11:47"/> 
 
\t <forecast> 
 
\t \t <time day="2016-02-23"> 
 
\t \t \t <symbol number="500" 
 
\t \t \t \t \t name="lichte regen" 
 
\t \t \t \t \t var="10d"/> 
 
\t \t \t <precipitation/> 
 
\t \t \t <windDirection deg="316" 
 
\t \t \t \t \t code="NW" 
 
\t \t \t \t \t name="Northwest"/> 
 
\t \t \t <windSpeed mps="9.01" 
 
\t \t \t \t \t name="Fresh Breeze"/> 
 
\t \t \t <temperature day="6.06" 
 
\t \t \t \t \t min="5.57" 
 
\t \t \t \t \t max="6.06" 
 
\t \t \t \t \t night="5.66" 
 
\t \t \t \t \t eve="5.57" 
 
\t \t \t \t \t morn="6.06"/> 
 
\t \t \t <pressure unit="hPa" 
 
\t \t \t \t \t value="1027.72"/> 
 
\t \t \t <humidity value="96" 
 
\t \t \t \t \t unit="%"/> 
 
\t \t \t <clouds value="clear sky" 
 
\t \t \t \t \t all="8" 
 
\t \t \t \t \t unit="%"/> 
 
\t \t </time> 
 
\t \t <time day="2016-02-24"> 
 
\t \t \t <symbol number="501" 
 
\t \t \t \t \t name="matige regen" 
 
\t \t \t \t \t var="10d"/> 
 
\t \t \t <precipitation value="3.15" 
 
\t \t \t \t \t type="rain"/> 
 
\t \t \t <windDirection deg="283" 
 
\t \t \t \t \t code="WNW" 
 
\t \t \t \t \t name="West-northwest"/> 
 
\t \t \t <windSpeed mps="6.21" 
 
\t \t \t \t \t name="Moderate breeze"/> 
 
\t \t \t <temperature day="4.98" 
 
\t \t \t \t \t min="4.17" 
 
\t \t \t \t \t max="5.11" 
 
\t \t \t \t \t night="4.17" 
 
\t \t \t \t \t eve="4.85" 
 
\t \t \t \t \t morn="4.32"/> 
 
\t \t \t <pressure unit="hPa" 
 
\t \t \t \t \t value="1030.97"/> 
 
\t \t \t <humidity value="100" 
 
\t \t \t \t \t unit="%"/> 
 
\t \t \t <clouds value="scattered clouds" 
 
\t \t \t \t \t all="48" 
 
\t \t \t \t \t unit="%"/> 
 
\t \t </time> 
 
\t \t <time day="2016-02-25"> 
 
\t \t \t <symbol number="500" 
 
\t \t \t \t \t name="lichte regen" 
 
\t \t \t \t \t var="10d"/> 
 
\t \t \t <precipitation value="1.23" 
 
\t \t \t \t \t type="rain"/> 
 
\t \t \t <windDirection deg="295" 
 
\t \t \t \t \t code="WNW" 
 
\t \t \t \t \t name="West-northwest"/> 
 
\t \t \t <windSpeed mps="5.71" 
 
\t \t \t \t \t name="Moderate breeze"/> 
 
\t \t \t <temperature day="5.43" 
 
\t \t \t \t \t min="4.92" 
 
\t \t \t \t \t max="5.48" 
 
\t \t \t \t \t night="5.34" 
 
\t \t \t \t \t eve="5.48" 
 
\t \t \t \t \t morn="4.92"/> 
 
\t \t \t <pressure unit="hPa" 
 
\t \t \t \t \t value="1026.18"/> 
 
\t \t \t <humidity value="100" 
 
\t \t \t \t \t unit="%"/> 
 
\t \t \t <clouds value="broken clouds" 
 
\t \t \t \t \t all="68" 
 
\t \t \t \t \t unit="%"/> 
 
\t \t </time> 
 
\t </forecast> 
 
</weatherdata>

そして、次のC++コード:

for(TiXmlElement* e = elem->FirstChildElement("time"); e != NULL; e = e->FirstChildElement("symbol")) 
     { 
      cout << "Got symbol" << endl; 

      attr = e->Attribute("var"); 
      if(attr != NULL) 
       cout << "Got var " << attr << endl; 
      attr = e->Attribute("name"); 
      if(attr != NULL) 
       cout << "Got name " << attr << endl; 
       attr = e->Attribute("number"); 
      if(attr != NULL) 
       cout << "Got number " << attr << endl; 
     } 

私の質問がある私は、次のXMLファイルを持っています3日間のデータが読み込まれて表示されますか?

挨拶、

ドン

答えて

0

あなたfor文の反復句が間違っています。それはtime要素を繰り返す必要があり、各time要素については、それは子のsymbol要素を取得する必要があります。

for (TiXmlElement* e = elem->FirstChildElement("time"); e != NULL; e = e->NextSiblingElement("time")) 
{ 
    TiXmlElement* t = e->FirstChildElement("symbol"); 
    if (t) 
    { 
     const char *a1 = t->Attribute("var"); 
     const char *a2 = t->Attribute("name"); 
     const char *a3 = t->Attribute("number"); 

     if (a1) 
      cout << "Got var " << a1 << "\n"; 
     if (a2) 
      cout << "Got name " << a2 << "\n"; 
     if (a3) 
      cout << "Got number " << a3 << "\n"; 
    } 
} 
関連する問題