tinyxml2简单使用

引入头文件

<span style="font-size:18px;">#include "HelloWorldScene.h"
#include "tinyxml2/tinyxml2.h"
USING_NS_CC;
using namespace tinyxml2;</span>


生成xml

<span style="font-size:18px;">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;
}</span>

运行结果为:

<span style="font-size:18px;"><?xml=version="1.0" encoding="UTF-8"?>
<!--test xml-->
<plist version="1.0" age="10">
    <dict>
        <key>keyValue</key>
        <array>
            <name>array value</name>
            <name>array value</name>
        </array>
    </dict>
</plist></span>

读取xml:

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();
    }
    
}

结果为:
cocos2d: name=version, value = 1.0
cocos2d: name=age, value = 10
cocos2d: key el is = keyValue
cocos2d: child el is = array value
cocos2d: child el is = array value

tinyxml2官网地址在: http://grinninglizard.com/tinyxml2docs/index.html























  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tinyxpath 解析简单 的小工具,输出是一个静态库。可 找到xml文档. TinyXml介绍 TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器 一. XML解析模型: 目前XML的解析主要有两大模型:SAX和DOM。 SAX是基于事件的,其基本工作流程是分析XML文档,当发现了一个新的元素时,产生一个对应事件,并调用相应的用户处理函数。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。 DOM(文档对象模型),则是在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于SAX,但可以给用户提供一个面向对象的访问接口,对用户更为友好。 另据说,一些同时提供了SAX和DOM接口的库,是在底层先实现SAX,再在SAX的基础上实现DOM 对于一个特定的XML文档而言,其正确性分为两个层次。 首先是其格式应该符合XML的基本格式要求,比如第一行要有声明,标签的嵌套层次必须前后一致等等,符合这些要求的文件,就是一个合格的XML文件,称作well-formatted。 其次,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。 因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单XML文件,比如配置文件时,特别的合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值