TinyXML使用方法[通俗易懂]

TinyXML使用方法[通俗易懂]TinyXML使用说明  TinyXML是一个C++的XML解析库,网上的评价都不错,是一个轻量级的XML解析库。关于TinyXML使用的文章有很多,而且官方也有完整的文档,这里只是简单把自己使用记录写下来,方便以后查阅。     一个XML文档例子:(文章后面会把这个XML当作例子使用)  <!–test.xml–><Persons><P…

大家好,又见面了,我是你们的朋友全栈君。

TinyXML 使用说明

  TinyXML是一个C++的XML解析库,网上的评价都不错,是一个轻量级的XML解析库。关于TinyXML使用的文章有很多,而且官方也有完整的文档,这里只是简单把自己使用记录写下来,方便以后查阅。

  

    一个XML文档例子:(文章后面会把这个XML当作例子使用)

 

复制代码
 <!-- test.xml -->

<Persons>
<Person ID="1">
周星星
</Person>
<Person ID="2">
白晶晶
</Person>
</Persons>
复制代码

 

TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。如果需要,可以将它做成自己的DLL来调用。

 

    使用的时候,只要把tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp 这六个文件导入工程,然后#include ” tinyxml.h”就可以使用。

 

在TinyXML中,根据XML的各种元素来定义了一些类:

TiXmlBase:整个TinyXML模型的基类。

TiXmlAttribute:对应于XML中的元素的属性。

TiXmlNode:对应于DOM结构中的节点。

TiXmlComment:对应于XML中的注释

TiXmlDeclaration:对应于XML中的申明部分,即<?versiong=”1.0″ ?>。

TiXmlDocument:对应于XML的整个文档。

TiXmlElement:对应于XML的元素。

TiXmlText:对应于XML的文字部分

TiXmlUnknown:对应于XML的未知部分。 

TiXmlHandler:定义了针对XML的一些操作。

 

这些类都是对应XML文件的一些元素,所以最好对XML文件有一些必要的了解。

 

TinyXML库对字符串可以使用两种编译方式:char * 以及 string 。所以我们在Wince使用的时候需要注意宽字符的转换。

 

1、将一个文件加载到 TinyXML DOM 中的最简单方法:

 

1 TiXmlDocument doc( "demo.xml" );
2
3 //注意TiXmlDocument构造方法参数类型是string
4 doc.LoadFile();

2、创建XML文件

 

复制代码
 1 TiXmlDocument doc;
2
3 //xml文件声明部分
4 TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
5
6 //添加新的节点元素
7 TiXmlElement * element = new TiXmlElement( "Hello" );
8
9 //对应Hello节点的值
10 TiXmlText * text = new TiXmlText( "World" );
11
12 //Hello 节点是文本节点,没有子节点
13 element->LinkEndChild( text );
14
15 //把声明和元素添加到文档
16 doc.LinkEndChild( decl );
17 doc.LinkEndChild( element );
18
19 //保存文档,修改过的xml文件一定要调用SaveFile方法保存数据
20 doc.SaveFile( "madeByHand.xml" );
复制代码

3、遍历整个XML文档

XML文档遍历,主要就是把DOM里面的元素、节点、节点属性全部遍历一次。

 

复制代码
//首先需要找到根节点,

TiXmlElement * rootElement = doc.RootElement();

//根节点的第一个子节点(根节点、子节点的概念,请看参考资料)

TiXmlElement * firstElement = rootElement->FirstChildElement();
复制代码

 

 

然后可以用上面的方法循环查询同一个节点下的子节点,再加上一个递归循环就可以查询所有的节点。具体代码看参考工程里面的例子。具体代码已经封装成函数。TinyXMLCtl.h头文件

 

 

我们在Wince里面大部分时候可能都是使用查询XML里面的数据,下面针对给出一个简单的查询功能,然后界面一些TinyXML里面的常用方法。

 

这是一个简单的遍历查询XML文档的代码,功能是遍历XML文档下根节点下的所有兄弟节点。(如果需要遍历兄弟节点下的子节点,需要加个递归调用就好)

 

 

复制代码
//查找根节点,rootElement就是指向<Persons>元素(看文档刚开始时给出的XML文件)

TiXmlElement * rootElement = doc.RootElement();

//查找根节点下第一个子节点,firstElement 指向第一个<Person>节点

TiXmlElement * firstElement = rootElement->FirstChildElement();



TiXmlElement *nextElement = firstElement;

//我在使用的时候使用了TinyXML的char * 字符编译,所以使用的方法返回的字//符串都是 char * 类型的。

const char *value;

const char *name;



//保存遍历得到的数据

CString temp;



//循环遍历根节点下的兄弟节点

while(nextElement)

{

//取出节点的文本节点内容,第一个Person节点的值是周星星

value = nextElement->GetText();

//取出节点的节点名字,第一个节点是Person

name = nextElement->Value();

//TinyXML里面返回的是char *类型的数据,这里要把它转为宽字符,最简单的方法是//直接转为CString,当然也可以用//MultiByteToWideChar,WideCharToMultiByte这两个微软提供的宽字符转换的//函数进行转换,在TinyXMLCtl.h里面,给出了两个封装的函数,具体请自行查看。

CString mmValue(value);

CString mmName(name);

temp = temp + mmValue + L""+ mmName+L"";

//查找下一个兄弟节点的指针

nextElement = nextElement->NextSiblingElement();

}
复制代码

上面最后temp字符串里面应该存放的是:Person 周星星 Person 白晶晶 。

 

上面只是一个简单遍历同级兄弟节点的方法,只要掌握这几个常用方法就可以自己拓展出复杂的查询方法。

 

下面再给出对数据常用的操作方法:增删改查 的简单例子和解析

 

4、修改XML节点

 

复制代码
//下面例子是修改test.xml第一个person节点的值“周星星”改为“星星”

//加载文档到DOM,跟上面一样

TiXmlDocument doc("test.xml");

doc.LoadFile();

//获取一个DOM的句柄,操作XML可以用节点Node、元素Element、或者句柄Handle都可//以。三种操作可以根据实际进行转换,转换方法可以参考官方文档。

TiXmlHandle docHandle( &doc );

//找到要修改的那个节点指针,这里是具体知道节点结构才这么做。实际使用的时候,我们需//要遍历查找一个节点名。在TinyXMLCtl.h头文件给出了实现的方法。下面这句话功能跟//doc.RootElement()效果一样,都是为了找到根节点。

TiXmlElement* DesElement = docHandle.FirstChild("Persons "). ToElement();

//找到该节点的第一个子节点(我们要修改的节点)

TiXmlNode * oldnode = DesElement->FirstChild();

//这里先获取该节点的

const char *ver = DesElement ->GetText();

//新的值,注意字符编码转换问题

string strText=”星星”;

TiXmlText *pValue = new TiXmlText(strText.c_str());

// 首先清除所有文本

pNode->Clear();

//把新文本添加进去,这里只是其中一种修改方法,还可以调用ReplaceChild()方法修改。

pNode->LinkEndChild(pValue);

//一定要保存文件,否则修改无效

doc.SaveFile();
复制代码

 


 

 

5、删除XML节点

节点删除,注意使用两个方法:

RemoveChild( TiXmlNode* removeThis )//方法删除父节点的子节点
RemoveAttribute( const char * name )//方法删除属性值.

 

复制代码
 1 //删除第一个节点Person
2
3 TiXmlDocument doc( "\\Storage Card\\test.xml" );
4
5 doc.LoadFile();
6
7 TiXmlElement * rootElement = doc.RootElement();
8
9 TiXmlElement * firstElement = rootElement->FirstChildElement();
10
11 //删除根节点下的第一个节点
12
13 RemoveChild(firstElement);
14
15 doc.SaveFile();
复制代码

 


 

5、新增XML节点

//加载文档

 

复制代码
 1 TiXmlDocument *pDoc = new TiXmlDocument();
2
3 pDoc->LoadFile(pXMLFile);
4
5 TiXmlElement * rootElement = doc.RootElement();
6
7 TiXmlElement * firstElement = rootElement->FirstChildElement();
8
9
10 string strText=“hello”;
11
12 // 生成子节点:pNewNode
13
14 TiXmlElement *pNewNode = new TiXmlElement(strNodeName.c_str());
15
16 // 设置节点文本,然后插入节点
17
18 TiXmlText *pNewValue = new TiXmlText(strText.c_str());
19
20 pNewNode->LinkEndChild(pNewValue);
21
22 //插入节点
23
24 pNode->InsertEndChild(*pNewNode);
25
26 pDoc->SaveFile(pXMLFile);
复制代码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131014.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • mysql:Java通过驱动包(jar包)连接MySQL数据库—步骤总结及验证

    mysql:Java通过驱动包(jar包)连接MySQL数据库—步骤总结及验证Java如何使用JDBC连接MySQL数据库一、下载驱动包Java连接MySQL需要驱动包,官网下载地址为MySQL驱动包官网下载还是建议大家下载以前的版本这是我选择的版本解压后得到jar库文件1.在工程目录中创建lib文件夹,将下载好的JDBC放到该文件夹下,如下图所示:2.右键工程名,点击最下方—Propertise,在javabuildpath中的…

  • lombok插件介绍「建议收藏」

    lombok插件介绍「建议收藏」Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不要再写另一个getter或equals方法,只要有一个注释,你的类就有一个功能齐全的构建器,自动记录变量等等。lombok插件大大减少了java开发的工作量,让程序员更加关注业务逻辑的实现。实现的方法举例:get/set/toString/equals/hashCode/无参构造函数/全参构造函数等。lombok插件注解@Data//data是lombok使用最多的注解,自动生成get/set/

  • PyCharm激活码永久有效PyCharm2017.2.6激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2017.2.6激活码教程-持续更新,一步到位PyCharm激活码永久有效2017.2.6激活码教程-Windows版永久激活-持续更新,Idea激活码2017.2.6成功激活

  • Linux主机网卡绑定bond0详解

    Linux主机网卡绑定bond0详解 1什么是bond        网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。可以通过以下命令确定内核是否支持bonding:…

  • SilverLight浏览器支持情况

    SilverLight浏览器支持情况推荐使用IE、360浏览器,搜狗、QQ浏览器需切换到兼容模式。以下浏览器版本不再支持:Chrome45及以后版本、Firefox52及以后版本、MicrosoftEdge浏览器、Opera浏览器。…

  • 完全卸载Office_vs卸载不了也安装不了了

    完全卸载Office_vs卸载不了也安装不了了  手动卸载步骤:   VisualStudioExpressEditions进入控制面板,运行添加或删除程序 卸载”MSDNLibraryforVisualStudio2005Beta” 卸载”MicrosoftSQLServer2005ExpressEdition” 卸载”MicrosoftSQLServer2005ToolsExpressEdition” 卸载”MicrosoftSQLNativeClient” 卸载”DMATranspor

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号