繁体   English   中英

无法在c ++中加载和解析android上的xml文件

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

我正在研究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具有已解析文件的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM