阿里网站制作需要多少钱,营销品牌推广公司,翻译公司网站建设多少钱,百度推广开户价格安装
TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2
步骤1#xff1a;首先#xff0c;你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2#xff1a;下载完成后#xff0c;需要将源代码解…安装
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 是简单实用的开源的 CXML 文件解析库可以很方便的应用到现有的项 目之中。 TinyXML2 解析器相对 TinyXML1 在代码上是完全重写使其更适合于游戏开发 中使用。它使用更少的内存更快并使用更少的内存分配。
由于 XML 的树状结构TinyXML2 将 XML 的节点抽象为 XMLNodeXML 中除了把属 性 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.husing 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 version1.0 encodingUTF-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(472251823qq.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::coutload xml file failedstd::endl;return false;}XMLElement* rootdoc.RootElement();XMLElement* userNoderoot-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::coutload xml file failedstd::endl;return false;}XMLElement* rootdoc.RootElement();XMLElement* userNoderoot-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执行效果截图
[rootlocalhost tinyxml_demmo]# g tinyXmlDemo.cpp -o tinyXmlDemo -L/usr/local/lib/ -ltinyxml2
[rootlocalhost 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
[rootlocalhost tinyxml_demmo]# ./tinyXmlDemo
?xml version1.0 encodingUTF-8?
UsersUser Namemilo Passwordpwd/
/Users
------------------------------
?xml version1.0 encodingUTF-8?
UsersUser Namemilo PasswordpwdGenderman/GenderMobile186****3143/MobileEmail472251823qq.com/Email/UserUser Nameking Passwordpwd2Mobile186****3143/Mobile/User
/Users
------------------------------
?xml version1.0 encodingUTF-8?
UsersUser Namemilo PasswordpwdGenderman/GenderAge18/AgeMobile Locationhome186****3143/MobileMobile Locationcompany186****3143/MobileEmail472251823qq.com/Email/UserUser Nameking Passwordpwd2Mobile186****3143/Mobile/User
/Users
------------------------------
?xml version1.0 encodingUTF-8?
UsersUser Namemilo PasswordpwdGenderman/GenderAge18/AgeMobile186****3143/MobileEmail472251823qq.com/Email/UserUser Nameking Passwordpwd2Mobile186****3143/Mobile/User
/Users
------------------------------
?xml version1.0 encodingUTF-8?
UsersUser Namemilo PasswordpwdGenderman/GenderAge10000/AgeMobile186****3143/MobileEmail472251823qq.com/Email/UserUser Nameking Passwordpwd2Mobile186****8888/Mobile/User
/Users
------------------------------
milo
pwd
10000
man
186****3143
472251823qq.com