解析XML文件并使用C ++编写结构

时间:2013-09-06 13:06:40

标签: c++ xml struct tinyxml

我被分配编写一个数据字段类,它将保存来自其他类的所有变量,这些变量充当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>

我需要知道出了什么问题。任何帮助将非常感激。提前谢谢。

0 个答案:

没有答案