cocos2d-x 3.2读取xml和json练习

读取和生成xml文件:
#include "tinyxml2/tinyxml2.h"
using namespace tinyxml2;


void HelloWorld::makeXml(const char* fileName)
{
    //写入路径
    std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName;
    XMLDocument *pDoc = new XMLDocument();
    //头声明
    XMLDeclaration *pDecl = pDoc->NewDeclaration("xml=version=\"1.0\" encoding=\"UTF-8\"");
    pDoc->LinkEndChild(pDecl);
    //注释
    XMLComment *pCom = pDoc->NewComment("test xml");
    pDoc->LinkEndChild(pCom);
    
    XMLElement *plistEl = pDoc->NewElement("plist");
    plistEl->SetAttribute("version", "1.0");
    plistEl->SetAttribute("age", 10);
    pDoc->LinkEndChild(plistEl);
    
    XMLElement *dictEl = pDoc->NewElement("dict");
    plistEl->LinkEndChild(dictEl);
    
    XMLElement *keyEl = pDoc->NewElement("key");
    keyEl->LinkEndChild(pDoc->NewText("keyValue"));
    dictEl->LinkEndChild(keyEl);
    
    XMLElement *arrayEl = pDoc->NewElement("array");
    dictEl->LinkEndChild(arrayEl);
    for (int i = 0; i<2 ; i++)
    {
        XMLElement *nameEl = pDoc->NewElement("name");
        nameEl->LinkEndChild(pDoc->NewText("array value"));
        arrayEl->LinkEndChild(nameEl);
    }
    
    pDoc->SaveFile(filePath.c_str());
    pDoc->Print();
    delete pDoc;
}

void HelloWorld::parseXml(const char* fileName)
{
    std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName;
    XMLDocument *pDoc = new XMLDocument();
    XMLError errorID = pDoc->LoadFile(filePath.c_str());
    if (errorID != 0)
    {
        return;
    }
    
    XMLElement *rootEl = pDoc->RootElement();
    const XMLAttribute *attribute = rootEl->FirstAttribute();
    while (attribute)
    {
        CCLOG("name=%s, value = %s", attribute->Name(), attribute->Value());
        attribute = attribute->Next();
    }
    
    XMLElement *dictEl = rootEl->FirstChildElement("dict");
    XMLElement *keyEl = dictEl->FirstChildElement("key");
    if (keyEl)
    {
        CCLOG("key el is = %s", keyEl->GetText());
    }
    
    XMLElement *arrayEl = keyEl->NextSiblingElement();
    XMLElement *childEl = arrayEl->FirstChildElement();
    while (childEl)
    {
        CCLOG("child el is = %s", childEl->GetText());
        childEl = childEl->NextSiblingElement();
    }
    
}


读取和生成json

#include "json/rapidjson.h"
#include "json/document.h"
#include "json/writer.h"
#include "json/stringbuffer.h"

例子:

void ReadAndWriteJsonScene::readJson()
{
    std::string name = "testJson.json";
    rapidjson::Document doc;
    if (!FileUtils::getInstance()->isFileExist(name))
    {
        CCLOG("file is not exist");
        return;
    }
    
    std::string data = FileUtils::getInstance()->getStringFromFile(name);
    doc.Parse<rapidjson::kParseDefaultFlags>(data.c_str());
    if (doc.HasParseError() || !doc.IsArray())
    {
        return;
    }
    
    for (auto i = 0; i<doc.Size(); i++)
    {
        rapidjson::Value &v = doc[i];
        std::string name;
        int age;
        std::string sex;
        if (v.HasMember("name"))
        {
            name = v["name"].GetString();
            auto len = v["name"].GetStringLength();
            CCLOG("name is %s, len is %d", name.c_str(), len);
        }
        
    }
    
}

void ReadAndWriteJsonScene::writeJson()
{
    rapidjson::Document doc;
    doc.SetObject();
    rapidjson::Document::AllocatorType &allocator = doc.GetAllocator();
    rapidjson::Value arr(rapidjson::kArrayType);
    rapidjson::Value obj(rapidjson::kObjectType);
    obj.AddMember("int", 1, allocator);
    obj.AddMember("double", 2.0, allocator);
    obj.AddMember("bool", true, allocator);
    obj.AddMember("hello", "xxxxx", allocator);
    arr.PushBack(obj, allocator);
    
    doc.AddMember("strX", "jsonTest", allocator);
    doc.AddMember("arr", arr, allocator);
    
    rapidjson::StringBuffer buffer;
    rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
    doc.Accept(writer);
    
    CCLOG("buffer string = %s", buffer.GetString());
}


测试的json文件

[

  {"name":"cl","age":27,"sex":"M"},

  {"name":"cbsss","age":25,"sex":"W"},

  {"name":"gx","age":25,"sex":"M"},

  {"name":"hxl","age":27,"sex":"W"}

]







posted @ 2014-09-24 16:12  无形的风  阅读(237)  评论(0编辑  收藏  举报