Мне было поручено написать класс поля данных, в котором будут храниться все переменные из другого класса, который выполняет функции парсера xml. При этом я использую TinyXML. Я использую структуры для хранения нескольких дочерних тегов. Тем не менее, существует проблема, когда я пытаюсь напечатать переменную, полученную из проанализированного файла XML. Вот демонстрация структуры с одним тегом, которую я пытаюсь построить:
Store.h
#ifndef STORE_H_
#define STORE_H_
#include <stdio.h>
#include <stdlib.h>
class Store
{
public:
Store();
private:
typedef struct
{
double d_position;
double d_temp;
double d_soundvel;
} GAB;
GAB gab;public:
// Getter and Setter
void SetGab (double d_position,
double d_temp,
double d_soundvel);
GAB GetGab();
....};
#endif
Store.cpp
#include "Store.h"#include <stdio.h>
#include <stdlib.h>
Store::Store()
{
}
void Store::SetGab (double d_position,
double d_temp,
double d_soundvel)
{
this->gab.d_position = d_position;
this->gab.d_temp = d_temp;
this->gab.d_soundvel = d_soundvel;
}
Store::GAB Store::GetGab()
{
return this->gab;
}
XMLParser.h
#ifndef XMLPARSER_H_
#define XMLPARSER_H_
#include <cstdlib>
#include "../tinyxml/tinyxml.cpp"#include "../tinyxml/tinyxml.h"#include "../tinyxml/tinyxmlerror.cpp"#include "../tinyxml/tinyxmlparser.cpp"#include "../tinyxml/tinystr.cpp"#include "../tinyxml/tinystr.h"#include "Store.h"
class XMLParser : public Store
{
public:
void ParseTheFile();
};
#endif
XMLParser.cpp
#include "XMLParser.h"
void XMLParser::ParseTheFile()
{
TiXmlDocument XMLdoc("file.xml");
bool load_status = XMLdoc.LoadFile();
if(load_status)
{
TiXmlElement *pRoot, *pGAB, *pposition, *ptemp, *psoundvel;
pRoot = XMLdoc.FirstChildElement("SENSOR");
if (pRoot)
{
pGAB = pRoot -> FirstChildElement("GAB");
if (pGAB)
{
pposition = pGAB -> FirstChildElement("position");
ptemp = pGAB -> FirstChildElement("temp");
psoundvel = pGAB -> FirstChildElement("soundvel");
if (pposition || ptemp || psoundvel)
{
this->SetGab(atof(pposition->GetText()),
atof(ptemp->GetText()),
atof(psoundvel->GetText()));
}
}
}
}
}
А вот управляющая программа, которая создает эти объекты и пытается получить проанализированную переменную.
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "src/Store.h"#include "src/XMLParser.h"
int main(int argc, char **argv)
{
XMLParser xmlparser;
xmlparser.ParseTheFile();
printf("%lf \n",xmlparser.GetGab().d_soundvel);
return 0;
}
Main.cpp ничего не возвращает. Я пытался контролировать XMLParser.cpp. Программа правильно анализирует xml-файл и записывает в структуру. Но что-то не так со структурой, что я не могу прочитать переменную из основной программы.
И, наконец, вот XML-файл, который я пытаюсь проанализировать:
file.xml
<?xml version='1.0' encoding='UTF-8'?>
<SENSOR>
...
<GAB>
<position>300</position>
<temp>24.658</temp>
<soundvel>342.18</soundvel>
</GAB>
...
</SENSOR>
Мне нужно знать, что идет не так. Любая помощь будет с благодарностью. Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …