cocos2dx3.4 导出节点树到XML文件

l利用cocostudio做UI和场景时,经常要去获取某个节点,cocostudio2.1开始加入了文件的概念,可以创建场景,节点,层等文件,把公用的东西创建到文件里,然后把这个文件拖到场景里使用,达到充分利用的目的。

从场景中获取某个文件的节点时,经常发现找不到,于是把场景节点树导出为XML文件,节点树也一目了然了,节点属性如名称等也可以根据需要导出来,效果如下:

代码:

    //导出从pNode节点开始的节点树到XML文件,bIsRoot:是否为根节点
    static void ExptSceneTreeToXml(Node *pNode,bool bIsRoot=false,tinyxml2::XMLElement *pParentEle=nullptr);
void UiManage::ExptSceneTreeToXml(Node *pNode,bool bIsRoot,tinyxml2::XMLElement *pParentEle)
{

    Node *pChild=nullptr;
    static tinyxml2::XMLDocument *pDoc=nullptr;
    string tempStr="";
    do
    {
        if (pNode)
        {
            //创建XML
            if (bIsRoot)
            {
                pDoc=new tinyxml2::XMLDocument();
                CC_BREAK_IF(pDoc==nullptr);
                //xml申明
                tinyxml2::XMLDeclaration *pDecl= pDoc->NewDeclaration("version=\"1.0\" encoding=\"UTF-8\"");
                CC_BREAK_IF(pDecl==nullptr);
                pDoc->LinkEndChild(pDecl);
                //根节点
                tinyxml2::XMLElement *pRootEle=pDoc->NewElement("RootNode");
                tempStr=pNode->getName();
                pRootEle->SetAttribute("Name",tempStr.c_str());

                pDoc->LinkEndChild(pRootEle);
                pParentEle=pRootEle;

            }
            //
            //遍历子节点
            if (pNode->getChildrenCount()>0)
            {
                //节点1
                tinyxml2::XMLElement *pChildREle0=pDoc->NewElement("Children");
                pParentEle->LinkEndChild(pChildREle0);
                //
                const Vector<Node*>& childVec=pNode->getChildren();
                for (auto chid:childVec)
                {
                    if (chid)
                    {
                        //节点2
                        tinyxml2::XMLElement *pChildEle=pDoc->NewElement("Node");
                        tempStr=chid->getName();
                        pChildEle->SetAttribute("Name",tempStr.c_str());
                        pChildREle0->LinkEndChild(pChildEle);
                        if (chid->getChildrenCount()>0)
                        {
                            ExptSceneTreeToXml(chid,false,pChildEle);
                        }
                    }
                }
                if (bIsRoot)
                {
                    string xmlPath=GetResPath()+"expt\\"+pNode->getName()+"SceneTree.xml";
                    CCLOG("-----save xml name=%s",xmlPath.c_str());
                    pDoc->SaveFile(xmlPath.c_str());
                }
            }

        }

    } while (0);

}
时间: 2024-11-10 11:06:26

cocos2dx3.4 导出节点树到XML文件的相关文章

C#导出List数据到xml文件[附源码]

C#导出List数据到xml文件,这里主要用到的是: XmlSerializer 类 (System.Xml.Serialization) 将对象序列化到 XML 文档中和从 XML 文档中反序列化对象.XmlSerializer 使您得以控制如何将对象编码到 XML 中. 实体类代码: /// <summary> /// 用户实体类 /// /// 注意:类的访问修饰符必须是:public,否则会出现错误: /// 因其保护级别而不可访问.只能处理公共类型. /// </summary

初学DOM树解析xml文件

做了一次设计模式实验的题目: 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录.短信.照片.歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中.在实现过程中需要与多个已有的类进行交互,例如通讯录管理类.短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能. 我自己在这道题目中构建了MMC,SD继承了abstract class的AbstractCard类,这样方便以后继续增加外接卡 对于通信录.短

Activiti导出模型文件xml(xml文件超过10K)

Activiti导出超过10K的xml文件时,response 要在获取输出流之前设置header格式 原代码为: ByteArrayInputStream in = new ByteArrayInputStream(exportBytes); IOUtils.copy(in, response.getOutputStream()); response.setHeader("Content-Disposition", "attachment; filename="+

Java文件操作①——XML文件的读取

一.邂逅XML 文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输.所以XML在现今应用程序中是非常流行的.本文主要讲Java解析和生成XML.用于不同平台.不同设备间的数据共享通信. XML文件的表现:以“.xml”为文件扩展名的文件: 存储结构:树形结构: 节点名称区分大小写. 1.<book id="1"></book> id为属性, <book><id>1</id></book>

50.使用DOM4J解析XML文件

需要导入dom4j-1.6.1.jar 收藏信息.xml <?xml version="1.0" encoding="GBK"?> <PhoneInfo> <Brand name="华为"> <Type name="U8650"/> <Type name="HW123"/> <Type name="HW321"/>

PowerShell技巧:使用XPath语法查询XML文件

[TechTarget中国原创] XML是存储结构化数据的一个很好的途径,但是想要让数据在其中发挥作用又会有些困难.每一种语言都有其特定方式来查询XML文件中的命名空间.元素及属性.PowerShell也不例外.PowerShell在查询XML文件时会略有不同,而该技巧主要依赖于Select-Xml命令和XPath语法上. XPath是定义XML文件组成的语言.XPath早在1999年就已经存在,一直被用于查询XML文件最标准的方法. XPath将XML文件定义为树.XML文件中的每个节点都节点

9.XML文件解析

一.xml文件的引入 1.1 创建Student.java类 1 package com.entity; 2 /** 3 * 1.创建学生类 4 * @author pc 5 * 6 */ 7 public class Student { 8 private int id; 9 private String name; 10 private String course; 11 private int score; 12 13 public Student() { 14 } 15 public S

XML文件的写,集合XML序列化(写)。XML文件的读,递归遍历

XML文件:必须要有一个节点.检验xml文件,可以用浏览器打开,能打开表示对,否则错. 处理方法: DOM:XmlDocument文档对象模型 Sax(事件驱动,XmlReader) XmlSerializer(序列化):可以序列化一个类,一个泛型集合. Linq to XML:主要用到类:Xelement XDocument XAttribute    using System.Xml.Linq; 写一个XML文件: 学校,班级,学生(性别,年龄,年龄) 1 namespace W_R_XML

Java解析XML文件的方式

在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式,在这部分里,将分别给大家演示通过这两种方式解析xml文件的一般步骤. 1 XML的文件格式     XML是可扩展标记语言(Extensible Markup Language)的缩写,在其中,开始标签和结束标签必须配套地出现,我们来看下book.xml这个例子. 1 <?xml version=