//一:创建xml并保存
//要储存XML文件的路径
std::string filePath = "wociao.xml";
//xml文档
tinyxml2::XMLDocument* pDoc = new tinyxml2::XMLDocument();
//xml声明
XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");
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
//1、空元素可以省略开始标记
//2、字符串一般不会作为属性值 而是节点值
//xml文件路径
std::string filePath01 = "wociao.xml";
//xmlDoc
tinyxml2::XMLDocument *pDoc01 = new tinyxml2::XMLDocument();
pDoc01->LoadFile(filePath01.c_str());
//得到跟节点
XMLElement *rootEle = pDoc01->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
pDoc01->SaveFile(filePath01.c_str());