cocos 2d-x tinyxml2生成、解析xml

生成xml

#include "tinyxml2/tinyxml2.h"

void createXML(const char* pFileName)
{
	//获取可写路径
	std::string filePath = FileUtils::getInstance()->getWritablePath() + pFileName;
    //项目资源目录
	//filePath = FileUtils::getInstance()->getDefaultResourceRootPath() + pFileName;

	//创建xml文档实例
	tinyxml2::XMLDocument *pDoc = new tinyxml2::XMLDocument();

	//xml 声明(参数可选)
	//xml文件统一头部
	XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");
	//在pDoc文档尾部子节点添加一个节点(第一行)
	pDoc->LinkEndChild(pDel);
	//添加plist节点
	//创建一个plis节点
	XMLElement *plistElement = pDoc->NewElement("plist");
	//设置节点属性
	plistElement->SetAttribute("version", "1.0");
	//将plist节点添加在文档当前尾部节点后面
	pDoc->LinkEndChild(plistElement);
	//创建一个注释
	XMLComment *commentElement = pDoc->NewComment("this is xml comment");
	//在plist节点里面的尾部节点后面添加上该注释
	plistElement->LinkEndChild(commentElement);
	//添加dic节点
	//创建一个dic节点
	XMLElement *dicElement = pDoc->NewElement("dic");
	//在plist节点里面的尾部节点添加dic节点
	plistElement->LinkEndChild(dicElement);
	//添加key节点
	//创建新节点
	XMLElement *keyElement = pDoc->NewElement("key");
	//添加属性
	keyElement->SetAttribute("type", "oneAtt");
	keyElement->SetAttribute("type_z", "secAtt");
	//在key节点内部加上文本节点
	keyElement->LinkEndChild(pDoc->NewText("Text"));
	//将key节点添加在dic节点里面尾部节点的后面
	dicElement->LinkEndChild(keyElement);
	//创建一个array节点
	XMLElement *arrayElement = pDoc->NewElement("array");
	//将arrray节点添加到dic节点里面内部节点的后面
	dicElement->LinkEndChild(arrayElement);
	for (int i = 0; i < 3; i++) {
		//创建一个name节点
		XMLElement *elm = pDoc->NewElement("name");
		//在name节点内部填入值
		elm->LinkEndChild(pDoc->NewText("Cocos2d-x"));
		//将name节点添加在array节点内部尾部节点的后面
		arrayElement->LinkEndChild(elm);
	}
	//保存文件
	pDoc->SaveFile(filePath.c_str());
	delete pDoc;
}

生成的xml



    
    
        Text
        
            Cocos2d-x
            Cocos2d-x
            Cocos2d-x
        
    

解析xml

void parseXML(const char* pFileName)
{
	std::string filePath = FileUtils::getInstance()->getWritablePath() + pFileName;
	tinyxml2::XMLDocument *pDoc = new tinyxml2::XMLDocument();
	XMLError errorId = pDoc->LoadFile(filePath.c_str());
	if (errorId != 0) {
		//xml格式错误
		return;
	}
	XMLElement *rootEle = pDoc->RootElement();
	//获取第一个节点属性
	const XMLAttribute *attribute = rootEle->FirstAttribute();
	//attribute->Next()
	//打印节点属性名和值
	log("attributename = %s,attributevalue = %s", attribute->Name(), attribute->Value());
	//拿到根节点下面第一个名为dic的子节点
	XMLElement *dicEle = rootEle->FirstChildElement("dic");
	//拿到dic节点下面第一个名为key的子节点
	XMLElement *keyEle = dicEle->FirstChildElement("key");
	if (keyEle) {
		log("keyEle Text= %s", keyEle->GetText());
	}
	//获取到key节点的下一个兄弟节点
	XMLElement *arrayEle = keyEle->NextSiblingElement();
	//获取到array节点下面的第一个子节点
	XMLElement *childEle = arrayEle->FirstChildElement();
	while (childEle) {
		log("childEle Text= %s", childEle->GetText());
		childEle = childEle->NextSiblingElement();
	}
	delete pDoc;
}

 

你可能感兴趣的:(cocos 2d-x tinyxml2生成、解析xml)