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

本文介绍了如何在Cocos2d-x项目中使用tinyxml2库来生成和解析XML文件,包括创建XML结构和读取XML数据的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成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

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <!--this is xml comment-->
    <dic>
        <key type="oneAtt" type_z="secAtt">Text</key>
        <array>
            <name>Cocos2d-x</name>
            <name>Cocos2d-x</name>
            <name>Cocos2d-x</name>
        </array>
    </dic>
</plist>

解析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("attribute<em>name = %s,attribute</em>value = %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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值