Я получил XML-файл:Почему этот код не производит в 4 раза больше и в пятый раз правильные данные?
<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++ код, который считывает XML-файл:
#include <iostream>
#include <string>
#include "tinyxml2.h"
using namespace std;
struct weatherData
{
// date of day
string time_day;
// symbol data for weathericon and display of weather type
string symbol_number;
string symbol_name;
string symbol_var;
// windspeed
string windSpeed_mps;
// min. and max. temperature
string temp_min;
string temp_max;
};
int main()
{
weatherData forecast[3];
int counter = 0;
tinyxml2::XMLDocument doc;
if(doc.LoadFile("daily.xml") == tinyxml2::XML_SUCCESS)
{
tinyxml2::XMLElement* root = doc.FirstChildElement();
for(tinyxml2::XMLElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement())
{
std::string elemName = elem->Value();
for (tinyxml2::XMLElement* e = elem->FirstChildElement("time"); e != NULL; e = e->NextSiblingElement("time"))
{
if (e)
{
const char *time = e->Attribute("day");
forecast[counter].time_day = time;
counter++;
}
}
cout << "Time dates: " << endl;
for (int i = 0; i < 3;i++)
{
cout << forecast[i].time_day << endl;
}
counter = 0;
}
}
}
Я новичок в кодировании. Я использую код примера из блога и адаптировал его для своих нужд. Я знаю, что for-loops просто пробегают элементы в XML-файле. И каждый раз, когда он находит элемент «время», он выглядит, если у него есть атрибут «день». То, что я не получаю, - это то, почему он работает 4 раза, и в пятый раз он создает атрибуты трех «временных» частей.
Это выход: даты
Время: даты
Время:
Время даты:
Время даты:
Время даты:
2016- 02-23 2016-02-24 2016-02-25
Спасибо за ваш очень ясный ответ! :) – Bluewave1976
Добро пожаловать :-) –
Да, я тоже это видел. Я изменил его, и теперь он работает. :) Еще раз спасибо. :) – Bluewave1976