当我尝试使用RapidXML框架解析简单的.xml文件时,它会引发parse_error,其原因是:“expected 现在这实际上是我第一次编写XML代码,因此这可能是一个愚蠢的语法错误,在这种情况下,请多多包涵:)
这是我的 xmlParser.h :

#ifndef __XML_PARSER_H__
#define __XML_PARSER_H__

#include "rapidxml.hpp"
#include "windowUtil.h"

class XmlParser
{
public:
    bool parse(char *xml)
    {
        try
        {
            doc.parse<0>(xml);
        }
        catch(rapidxml::parse_error &e)
        {
            msg_box(NULL, e.what(), "RapidXML exception!", MB_OK | MB_ICONERROR | MB_TASKMODAL);

            return false;
        }

        return true;
    }

    char* get_first_node_name()
    {
        return doc.first_node()->name();
    }
private:
    rapidxml::xml_document<> doc;
};

#endif

这就是它的调用和使用方式:
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
    XmlParser xmlParser;
    WindowFramework *window = create_window(&framework, NULL, NULL, "GAME");

    if(!init_window(window, true, true))
        return kill(1);
    if(!xmlParser.parse("./layouts/login_gui.xml"))
        return kill(1);

    framework.main_loop();

    return kill(0);
}

login_gui.xml :
<?xml version="1.0"?>
<button>
    <text>EXIT</text>
    <buttonready>button.png</buttonready>
    <buttonrollover>button_active.png</buttonrollover>
    <buttonpressed>button_pressed.png</buttonpressed>
    <buttoninactive>button_inactive.png</buttoninactive>
</button>

最佳答案

parse方法采用包含XML的字符串,您正在向其传递文件名。您的文件名被视为XML数据,显然这是不对的。您必须先读入文件,然后使用结果字符串调用parse。

RapidXML docs:


void parse(Ch *text);



您修改后的结构可能类似于
bool parse(char *xmlFile)
{
     try
     {
        std::string xml(getXmlDataFromFile(xmlFile));
        doc.parse<0>(xml.c_str());
     }

关于c++ - RapidXML引发parse_error异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6333319/

10-09 05:13