gpt4 book ai didi

c++ - RapidXML 抛出 parse_error 异常

转载 作者:行者123 更新时间:2023-11-30 00:58:22 26 4
gpt4 key购买 nike

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

function xml_document::parse

Synopsis

void parse(Ch *text); 

Description

Parses zero-terminated XML string according to given flags.

你修改后的结构可能是这样的

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com