当前位置: 首页 > news >正文

类似天书奇谈的网页游戏电脑优化设置

类似天书奇谈的网页游戏,电脑优化设置,二次开发小程序,wordpress分享插件安装 TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2 步骤1:首先,你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2:下载完成后,需要将源代码解…

安装

TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2

步骤1:首先,你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/
 步骤2:下载完成后,需要将源代码解压,可以使用以下命令:

tar -zxvf tinyxml2-8.1.0.tar.gz

步骤3:解压后,切换到源代码目录:

 cd tinyxml2-8.1.0

 步骤4:执行make && make install  命令进行安装:

make &&  make install

温馨提示:完成以上步骤后,在/usr/local/lib下会生成libtinyxml2.so动态库和/usr/local/include下生成tinyxml2.h头文件。你可以使用以下命令查看是否安装成功:

ls /usr/local/lib | grep tinyxml2
ls /usr/local/include | grep tinyxml2

如果看到libtinyxml2.so和tinyxml2.h,则说明成功安装了tinyxml库。

 TinyXml2 库

简介

TinyXML2 是简单实用的开源的 C++XML 文件解析库,可以很方便的应用到现有的项 目之中。 TinyXML2 解析器相对 TinyXML1 在代码上是完全重写,使其更适合于游戏开发 中使用。它使用更少的内存,更快,并使用更少的内存分配。

由于 XML 的树状结构,TinyXML2 将 XML 的节点抽象为 XMLNode,XML 中除了把属 性 key-value 抽象为 XMLAttribute 类型外,其余的都看作 XMLNode 的子类,首先将整个 XML 文档抽象为 XMLDocument,将声明部分抽象为 XMLDeclaration,将注释抽象为 XMLComment,将元素抽象为 XMLElement,将文本抽象为 XMLText。
 

核心:节点、元素、属性和值

XMLAttribute 是解析 XML 的属性的类,XML 中的属性都与 XML 的 Element 绑定,并且为 key-value 类型。

XMLComment       主要是处理 XML 注释的类,注释的存储形式为""。

XMLDeclaration 主要是处理 XML 中声明的类,声明的存储形式为"<? declaration ?>"。 XMLDocument  代表 XML 整个实体,TinyXML2 中只有 XMLDocument 类可以被实例化,其他的类必

须通过 XMLDocument 提供的 new 方法进行实例化,而不能直接实例化。XMLNode

的其他实体类把构造函数定义为 protected,不能被外部实例化,这样保证使用 XMLDocument 进行内存的管理,避免产生内存泄漏的风险。

XMLElement    XMLElement 类是 XMLNode 中最重要的一个类,其存储方式有<foo/>和<foo></foo> 两 种 形 式 , 它 包 含 了 一 个 XMLAttribute 的 根 指 针 , 这 个 root 指 针 指 向 XMLAttribute 的第一个属性键值对。

XMLHandle        主要用来访问元素。

XMLNode     是几乎 XML 所有元素(XMLAttribute 除外)的基类,XML 本质是一种树形结构,而 整个 XML 就是由许多的节点(XMLNode)组成,在 TinyXML2 中每个 XMLNode 节点都 保存了父亲、前驱、后继、孩子头节点和孩子尾节点信息,便于查询、插入、检 索。

XMLPrinter 是 XMLVisitor 类的子类,主要实现的写 XML 的功能,其提供了两种书写方式,一 是构建 XMLDocument,二是直接 push 字段。

XMLText 主要是处理 XML 文本的类,文本信息又分为 CDATA 和普通文本。CDATA 是有专属的 开始字符"<![CDATA[",而普通的文本存储形式如">text<"。

XMLUnknown       存储形式为"<! unknown>"。

XMLVisitor 访问者模式的基类,它主要定义了访问者的接口,而在 XMLNode 的子类的 accept 方法中调用这些方法来完成对自身的访问。
 

示例代码

前提条件:在/usr/local/source_code 创建目录:tinyxml_demmo,并创建tinyXmlDemo.cpp文件,文件内容如下:


#include <iostream>
#include "tinyxml2.h"
#include <stdio.h>
#include <stdlib.h>using namespace tinyxml2;/*
enum XMLError {XML_SUCCESS = 0,XML_NO_ATTRIBUTE,XML_WRONG_ATTRIBUTE_TYPE,XML_ERROR_FILE_NOT_FOUND,XML_ERROR_FILE_COULD_NOT_BE_OPENED,XML_ERROR_FILE_READ_ERROR,XML_ERROR_PARSING_ELEMENT,XML_ERROR_PARSING_ATTRIBUTE,XML_ERROR_PARSING_TEXT,XML_ERROR_PARSING_CDATA,XML_ERROR_PARSING_COMMENT,XML_ERROR_PARSING_DECLARATION,XML_ERROR_PARSING_UNKNOWN,XML_ERROR_EMPTY_DOCUMENT,XML_ERROR_MISMATCHED_ELEMENT,XML_ERROR_PARSING,XML_CAN_NOT_CONVERT_TEXT,XML_NO_TEXT_NODE,XML_ELEMENT_DEPTH_EXCEEDED,XML_ERROR_COUNT
};
*///创建XML文件
int createXML(const char* xmlPath)
{XMLDocument doc;if (XML_ERROR_FILE_NOT_FOUND != doc.LoadFile(xmlPath)) {std::cout << "file has been existed !" << std::endl;return 0;}//添加声明 <?xml version="1.0" encoding="UTF-8" ?>XMLDeclaration *declaration = doc.NewDeclaration();doc.InsertFirstChild(declaration);XMLElement *root = doc.NewElement("Users");doc.InsertEndChild(root);XMLElement *userNode = doc.NewElement("User");//添加属性userNode->SetAttribute("Name", "milo");userNode->SetAttribute("Password", "pwd");root->InsertEndChild(userNode);return doc.SaveFile(xmlPath);
}void loadXML(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return;}XMLPrinter printer;doc.Print( &printer);std::cout << printer.CStr();
}//添加性别,号码,邮箱      再添加一个用户
int addXML1(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *userNode = root->FirstChildElement("User");XMLElement *gender = doc.NewElement("Gender");XMLText* genderText = doc.NewText("man");gender->InsertFirstChild(genderText);userNode->InsertFirstChild(gender);XMLElement *mobile = doc.NewElement("Mobile");mobile->InsertFirstChild(doc.NewText("186****3143"));userNode->InsertEndChild(mobile);XMLElement *email = doc.NewElement("Email");email->InsertFirstChild(doc.NewText("472251823@qq.com"));userNode->InsertEndChild(email);XMLElement *userNode2 = doc.NewElement("User");userNode2->SetAttribute("Name", "king");userNode2->SetAttribute("Password", "pwd2");root->InsertEndChild(userNode2);XMLElement *mobile2 = doc.NewElement("Mobile");mobile2->InsertFirstChild(doc.NewText("186****3143"));userNode2->InsertEndChild(mobile2);return doc.SaveFile(xmlPath);
}//在性别后面添加年龄,再添加一个号码
int addXML2(const char* xmlPath)
{XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS){std::cout<<"load xml file failed"<<std::endl;return false;}XMLElement* root=doc.RootElement();XMLElement* userNode=root->FirstChildElement("User");XMLElement* gender = userNode->FirstChildElement("Gender");XMLElement* age = doc.NewElement("Age");age->InsertFirstChild(doc.NewText("18"));userNode->InsertAfterChild(gender,age);XMLElement* mobile = userNode->FirstChildElement("Mobile");mobile->SetAttribute("Location","home");XMLElement* mobile1 = doc.NewElement("Mobile");mobile1->SetAttribute("Location","company");mobile1->InsertFirstChild(doc.NewText("186****3143"));userNode->InsertAfterChild(mobile, mobile1);return doc.SaveFile(xmlPath);
}//删除第一个号码,删除第二个号码的属性
int deleteXML(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *userNode = root->FirstChildElement("User");XMLElement *mobile = userNode->FirstChildElement("Mobile");userNode->DeleteChild(mobile);XMLElement *mobile2 = userNode->FirstChildElement("Mobile");mobile2->DeleteAttribute("Location");return doc.SaveFile(xmlPath);
}//将milo的年龄改为10000岁,将king的号码改为8888结尾
int updateXML(const char* xmlPath) {XMLDocument doc;if (doc.LoadFile(xmlPath) != XML_SUCCESS) {std::cout << "load xlm file failed" << std::endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *userNode = root->FirstChildElement("User");while (userNode != NULL) {if (0 == strncmp("milo", (userNode->Attribute("Name")), 11)) {userNode->FirstChildElement("Age")->SetText("10000");userNode = userNode->NextSiblingElement();} else if (0 == strncmp("king", (userNode->Attribute("Name")), 11)) {userNode->FirstChildElement("Mobile")->SetText("186****8888");userNode = userNode->NextSiblingElement();} else {userNode = userNode->NextSiblingElement();}}return doc.SaveFile(xmlPath);
}//将milo的信息打印出来
int selectXML(const char* xmlPath)
{XMLDocument doc;if(doc.LoadFile(xmlPath)!=XML_SUCCESS){std::cout<<"load xml file failed"<<std::endl;return false;}XMLElement* root=doc.RootElement();XMLElement* userNode=root->FirstChildElement("User");while(userNode != NULL){if( 0 == strncmp("milo",(userNode->Attribute("Name")),11)){std::cout << userNode->Attribute("Name") << std::endl;std::cout << userNode->Attribute("Password") << std::endl;std::cout << userNode->FirstChildElement("Age")->GetText() << std::endl;std::cout << userNode->FirstChildElement("Gender")->GetText() << std::endl;std::cout << userNode->FirstChildElement("Mobile")->GetText() << std::endl;std::cout << userNode->FirstChildElement("Email")->GetText() << std::endl;userNode = userNode->NextSiblingElement();} else {userNode = userNode->NextSiblingElement();}}return 0;
}int main( int argc, const char ** argv )
{char xmlPath[] = "./0voice.xml";/*创建*/createXML(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*增*/addXML1(xmlPath);loadXML(xmlPath);printf("------------------------------\n");addXML2(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*删*/deleteXML(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*改*/updateXML(xmlPath);loadXML(xmlPath);printf("------------------------------\n");/*查*/selectXML(xmlPath);return 0;
}

源码编译,执行如下指令:

g++ tinyXmlDemo.cpp -o tinyXmlDemo -L/usr/local/lib/ -ltinyxml2

执行效果截图:

[root@localhost tinyxml_demmo]# g++ tinyXmlDemo.cpp -o tinyXmlDemo -L/usr/local/lib/ -ltinyxml2
[root@localhost tinyxml_demmo]# ll
总用量 120
-rw-r--r--. 1 root root    168 10月 23 15:36 parseXml.xml
-rwxr-xr-x. 1 root root 110536 10月 23 15:48 tinyXmlDemo
-rw-r--r--. 1 root root   7091 10月 23 15:47 tinyXmlDemo.cpp
[root@localhost tinyxml_demmo]# ./tinyXmlDemo
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"/>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Mobile>186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****3143</Mobile></User>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Age>18</Age><Mobile Location="home">186****3143</Mobile><Mobile Location="company">186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****3143</Mobile></User>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Age>18</Age><Mobile>186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****3143</Mobile></User>
</Users>
------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Users><User Name="milo" Password="pwd"><Gender>man</Gender><Age>10000</Age><Mobile>186****3143</Mobile><Email>472251823@qq.com</Email></User><User Name="king" Password="pwd2"><Mobile>186****8888</Mobile></User>
</Users>
------------------------------
milo
pwd
10000
man
186****3143
472251823@qq.com

http://www.yayakq.cn/news/289093/

相关文章:

  • php网站开发面试搜索引擎优化人员优化
  • 江苏省城乡建设局网站首页施工企业总工程师述职报告
  • 电子商务概论亿唐网不做网站做品牌网站开发简介
  • 深圳做网站建设的公司建筑公司注册要求
  • wordpress批量采集器搜索引擎关键词优化方案
  • dw使用模板做网站教程网站源码如何安装
  • 网站建设公司哪家好速找盛世传媒asp类似wordpress
  • 佛山网站制作专业公司小程序开发制作流程
  • 福建微网站建设wordpress 首页插件
  • php旅游网站cms个体工商户年报登录入口
  • 元做网站社区信息建设网站
  • 网站图片怎么做的高级wordpress头像管理插件
  • php网站制作工具网络市场前景分析
  • 济南做企业网站的公司jsp网站建设论文
  • 开网店软件整站排名优化品牌
  • 苏州建设信息网站网络顾问
  • 网站快速备案通道2016网站设计欣赏
  • 网站视频怎么下载到本地干净简约高端的网站
  • 商城网站开发的任务书wordpress关键词插件
  • wordpress网站不安全自己做网站需要备案么
  • 网站页面设计公司推荐长春网站优化策略
  • 给别人做网站的销售叫什么女的和女的做那个视频网站
  • 中国循环经济网站开发与设计成都 网站建设培训班
  • 我的网站突然打不开了福州直播app开发公司
  • 网站如何做cc防护哪里有放网站的免费空间
  • 做非法网站判刑多少年怎样自建网站
  • 网上商城系统平台官网深圳建站公司优化
  • dw怎么做phpcms网站专业的外贸网站
  • 自适应网站建设用wordpress做微博
  • 网站开发语言包括哪些某服装企业网站建设方案