无法在 c++ 中在安卓上加载和解析 xml 文件

Can't load and parse xml file on android in c++

本文关键字:和解 加载 xml 文件 c++      更新时间:2023-10-16

我正在处理一个Cocos2dx C++项目,我正在尝试加载一个XML文件并用rapidxml解析它。

Win32构建与此代码配合使用非常好。

rapidxml::file<> xmlFile("myxml.xml"); 
xml_document<> doc; // character type defaults to char
doc.parse<0>(xmlFile.data());    // 0 means default parse flags
xml_node<> *main = doc.first_node();  //Get the main node that contains everything

这不适用于Android版本。很可能是因为找不到"myxml.xml"。所以我的解决方案是以不同的方式加载文件。

所以我尝试用这个替换xmlFile.data()。手机现在可以定位和读取数据,但我无法通过rapidxml进行解析。

const unsigned char* xmldata = CCFileUtils::sharedFileUtils()->getFileData("myxml.xml", "r", &tmpSize);

但我不知道如何解析它。

这是获取数据的另一种方式,但仍然不知道如何使用rapidxml进行解析。

std::string xmldata2 = CCFileUtils::sharedFileUtils()->getStringFromFile("myxml.xml");

有没有关于如何在rapidxml中解析这个问题的想法,或者关于如何解决这个问题的任何其他建议?

我是c++的新手,所以非常感谢您的帮助。

我使用过PugiXML,使用起来相对简单。文件读取为:

xml_document* doc = new xml_document;
unsigned char* pBuffer = NULL;
unsigned long bufferSize = 0;
std::string fullPath = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(filename);
pBuffer = CCFileUtils::sharedFileUtils()->getFileData(fullPath.c_str(), "r", &bufferSize);
if(bufferSize == 0)
{
    CCLog("file failed to open");
    delete doc;
}
xml_parse_result results = doc->load_buffer(pBuffer, bufferSize);
CCLog("filename: %s | result: %s | status: %d",filename, results.description(), results.status);
if(pBuffer)
{
    delete [] pBuffer;
    pBuffer = NULL;
}
xml_node mainNode = doc->child("main");

mainNode然后拥有解析文件的内容。