导入头文件:
#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文件路径
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());