[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
编程语言
> 详细
C++之tinyXML使用
时间:
2014-10-30 11:51:23
阅读:
277
评论:
0
收藏:
0
[点我收藏+]
tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你的工程中,没有STL也可以编译运行。
下面我从这几个方面谈谈对tinyXML类库的使用以及理解。
首先在sourceforge上下载tinyXML类库,地址:
http://sourceforge.net/projects/tinyxml/
然后解压缩tinyXML后,将这六个文件添加到你的c++工程中,分别是
tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp
。在需要操作xml文件的地方,使用如下代码,就可以引入tinyXML类库。
C++代码
#include<tinyxml>
或者
C++代码
#include "tinyxml.h"
下面我用个简单的例子说明如何使用tinyXML操作xml文件。在讲例子之前我先说说tinyXML中主要类和xml文档之间的对应关系。下面是tinyXML中主要class的类图,反应各个类之间的静态关系。
引用来自tinyXML文档
TiXmlBase是所有类的基类,TiXmlNode、TiXmlAttribute两个类都继承来自TiXmlBase类,其中TiXmlNode类指的是所有被
<...>...<.../>
包括的内容,而xml中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在TiXmlNode的基础上又衍生出这几个类TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown,分别用来指明具体是xml中的哪一部分。TiXmlAttribute类不同于TiXmlNode,它指的是在尖括号里面的内容,像
<... ***=...>
,其中
***
就是一个属性。这块我具体用一个xml文档说明一下,内容如下:
Xml代码
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
phonebook
>
<!--one item behalfs one contacted person.-->
<
item
>
<
name
>
miaomaio
</
name
>
<
addr
>
Shaanxi Xi‘an
</
addr
>
<
tel
>
13759911917
</
tel
>
<
email
>
miaomiao@home.com
</
email
>
</
item
>
<
item
>
<
name
>
gougou
</
name
>
<
addr
>
Liaoning Shenyang
</
addr
>
<
tel
>
15840330481
</
tel
>
<
email
>
gougou@home.com
</
email
>
</
item
>
<!--more contacted persons.-->
</
phonebook
>
像TiXmlDeclaration指的就是<?xml version="1.0" encoding="UTF-8"?>,
像TiXmlComment指的就是<!--one item behalfs one contacted person.-->、 <!--more contacted persons.-->,
像TiXmlDocument指的就是整个xml文档,
像TiXmlElement指的就是<phonebook>、<item>、<name>、<addr>等等这些节点,
像TiXmlText指的就是‘gougou’、‘15840330481’这些夹在<item>与</item>、<name>与</name>、<addr>与</addr>之间的文本文字,
像TiXmlAttribute指的就是<?xml version="1.0" encoding="UTF-8"?>节点中version、encoding,
除此之外就是TiXmlUnknown。
下面是我自己写的一段读xml文件的c++代码,以及再往xml写入一个item的源代码,其中phonebookdata.xml中的内容就是上面xml,仅供参考。
C++代码
//______________________________________________________________________
// Read information from xml file.
// define xml file path, as follow , we use relative path,
// but you can use absolute path also.
const
char
* filepath =
"phonebookdata.xml"
;
TiXmlDocument doc(filepath);
bool
loadOkay = doc.LoadFile();
// faile to load ‘phonebookdata.xml‘.
if
(!loadOkay) {
printf(
"Could not load test file %s. Error=‘%s‘. Exiting.\n"
, filepath,doc.ErrorDesc() );
exit( 1 );
}
// get dom root of ‘phonebookdata.xml‘, here root should be ‘phonebook‘.
TiXmlElement* root = doc.RootElement();
printf(
"_______________________________________\n\n"
);
printf(
" contacted person information \n\n"
);
// trace every items below root.
for
( TiXmlNode* item = root->FirstChild(
"item"
);
item;
item = item->NextSibling(
"item"
) ) {
printf(
"_______________________________________\n"
);
// read name.
TiXmlNode* child = item->FirstChild();
const
char
* name = child->ToElement()->GetText();
if
(name) {
printf(
"name:%s\n"
,name);
}
else
{
printf(
"name:\n"
);
}
// read address.
child = item->IterateChildren(child);
const
char
* addr = child->ToElement()->GetText();
if
(addr) {
printf(
"addr:%s\n"
,addr);
}
else
{
printf(
"addr:\n"
);
}
// read telephone no.
child = item->IterateChildren(child);
const
char
* tel = child->ToElement()->GetText();
if
(tel) {
printf(
"tel:%s\n"
,tel);
}
else
{
printf(
"tel:\n"
);
}
// read e-mail.
child = item->IterateChildren(child);
const
char
* email = child->ToElement()->GetText();
if
(email) {
printf(
"email:%s\n"
,email);
}
else
{
printf(
"email:\n"
);
}
printf(
"\n"
);
}
//______________________________________________________________________
//______________________________________________________________________
// Add information to xml file and save it.
TiXmlElement* writeRoot = doc.RootElement();
TiXmlNode* newNode =
new
TiXmlElement(
"item"
);
const
TiXmlNode* name4NewNode =
new
TiXmlElement(
"name"
);
newNode->InsertEndChild(*name4NewNode)->InsertEndChild(TiXmlText(
"pipi"
));
const
TiXmlNode* addr4NewNode =
new
TiXmlElement(
"addr"
);
newNode->InsertEndChild(*addr4NewNode)->InsertEndChild(TiXmlText(
"Shaanxi Xianyang"
));
const
TiXmlNode* tel4NewNode =
new
TiXmlElement(
"tel"
);
newNode->InsertEndChild(*tel4NewNode)->InsertEndChild(TiXmlText(
"02937310627"
));
const
TiXmlNode* email4NewNode =
new
TiXmlElement(
"email"
);
newNode->InsertEndChild(*email4NewNode)->InsertEndChild(TiXmlText(
"pipi@home.com"
));
writeRoot->InsertEndChild(*newNode);
doc.SaveFile();
//______________________________________________________________________
具体使用可以参考tinyxml随带的文档。
C++之tinyXML使用
原文:http://blog.csdn.net/l_andy/article/details/40615517
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!