我用的是2.1.4的cocos2d-x,里面自帶有tinyxml2庫。好像2.1.0以上都有了
導入頭文件:
#include "support/tinyxml2/tinyxml2.h"
一:創建xml並保存
//要儲存XML文件的路徑 std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "wociao.xml"; //xml文檔 XMLDocument *pDoc = new XMLDocument(); if (NULL==pDoc) { return ; } //xml聲明 XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\""); if (NULL==pDel) { return ; } pDoc->LinkEndChild(pDel); //節點plist XMLElement *plistElement = pDoc->NewElement("plist"); plistElement->SetAttribute("version", "1.0");//給節點設置屬性 pDoc->LinkEndChild(plistElement); //節點dict XMLElement *dictElement = pDoc->NewElement("dict"); plistElement->LinkEndChild(dictElement); //節點key XMLElement *keyElement = pDoc->NewElement("key"); keyElement->LinkEndChild(pDoc->NewText("keyText"));//給節點設置值 dictElement->LinkEndChild(keyElement); //節點string XMLElement *stringElement = pDoc->NewElement("string"); stringElement->LinkEndChild(pDoc->NewText("stringText"));//給節點設置值 dictElement->LinkEndChild(stringElement); //節點array XMLElement *arrayElemet = pDoc->NewElement("array"); dictElement->LinkEndChild(arrayElemet); for (int i = 0; i<3; i++) { XMLElement *strEle = pDoc->NewElement("string"); strEle->LinkEndChild(pDoc->NewText("icon")); arrayElemet->LinkEndChild(strEle); } pDoc->SaveFile(filePath.c_str());//保存文件 參數:路徑 pDoc->Print();//打印 delete pDoc;
打印的結果
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>keyText</key> <string>stringText</string> <array> <string>icon</string> <string>icon</string> <string>icon</string> </array> </dict> </plist>
二:解析xml
//xml文件路徑 std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "wociao.xml"; //xmlDoc XMLDocument *pDoc = new XMLDocument(); pDoc->LoadFile(filePath.c_str()); //得到跟節點 XMLElement *rootEle = pDoc->RootElement(); //打印節點的值 CCLog("%s",rootEle->GetText()); //節點的第一個屬性 const XMLAttribute *attribute = rootEle->FirstAttribute(); //打印屬性的名字和值 CCLog("%s %s",attribute->Name(),attribute->Value()); //查找節點的屬性值 float value = 0.1f; rootEle->QueryFloatAttribute("version", &value); CCLog("%f",value); //設置節點屬性值 rootEle->SetAttribute("version", 1.4); //跟節點的第一個字節點 dict XMLElement *dictEle = rootEle->FirstChildElement(); //dict下面的子節點 key XMLElement *keyEle = dictEle->FirstChildElement(); //打印key節點的值 CCLog("%s,%s",keyEle->Name(),keyEle->GetText()); //key節點的next節點 string XMLElement *stringEle = keyEle->NextSiblingElement(); CCLog("%s,%s",stringEle->Name(),stringEle->GetText()); //string節點的子節點 XMLElement *nulXmlEle = stringEle->FirstChildElement(); if (NULL == nulXmlEle) { CCLog("string下面沒有子點了"); } //保存xml pDoc->SaveFile(filePath.c_str());