网上看各种例子,然后尝试编写,各种问题。可能是版本不一致吧,我使用的cocos2d-x 2.2.6,下面自己写测试代码:
比如测试.xml数据如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Data>
<Level>1</Level>
<Hp>100000</Hp>
<Exp>1000</Exp>
</Data>
<Data>
<Level>2</Level>
<Hp>200000</Hp>
<Exp>2000</Exp>
</Data>
<Data>
<Level>3</Level>
<Hp>300000</Hp>
<Exp>3000</Exp>
</Data>
</Root>
测试代码:
#include "support/tinyxml2/tinyxml2.h"
void HelloWorld::InitXml(const char* filePath)
{
std::string xmlFilePath = CCFileUtils::sharedFileUtils()->fullPathForFilename(filePath);
// 根据文件名获取对应的xml文档指针
tinyxml2::XMLDocument *pXmlDoc = new tinyxml2::XMLDocument();
tinyxml2::XMLError errorId = pXmlDoc->LoadFile(xmlFilePath.c_str());
if(errorId != 0)
{
// xml格式错误
return;
}
// 获取根节点
tinyxml2::XMLElement *rootNode = pXmlDoc->RootElement();
CCLOG("rootNode = %s",rootNode->Name()); // 根元素名称
// 获取第一个子节点
tinyxml2::XMLElement *firstElement = rootNode->FirstChildElement();
CCLOG("%s",firstElement->Name()); // 子节点名称
//
while(firstElement != NULL)
{
// 获取该节点的子级
tinyxml2::XMLNode *pCurNode = firstElement->FirstChild();
while(pCurNode != NULL)
{
CCLOG(" %s = %s", pCurNode->Value(), pCurNode->ToElement()->GetText());
// 获取该节点的下一个子级
pCurNode = pCurNode->NextSibling();
}
//获取下一个子节点
firstElement = firstElement->NextSiblingElement();
CCLOG(" ");
}
}
输出结果:
rootNode = Root
Data
Level = 1
Hp = 100000
Exp = 1000
Level = 2
Hp = 200000
Exp = 2000
Level = 3
Hp = 300000
Exp = 3000
至于为什么,请大家自行查找,抄写出来的程序并不说明我懂了,知道为什么这些写的程序才是真的进步!
原文:http://www.cnblogs.com/SkyflyBird/p/5046378.html