当我尝试使用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/