网络服务器软件开发/中间件开发,关注ACE/ICE/boost
C++博客
首页
新随笔
联系
聚合
管理
152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(18)
给我留言
查看公开留言
查看私人留言
随笔分类
ACE(12)
boost(6)
C++基础(20)
CORBA(4)
Design Pattern(1)
ebook(1)
ICE(7)
java(1)
linux(28)
mysql(15)
PHP(1)
python(6)
RakNet(1)
SQLite
STL(1)
VC/MFC/.NET(4)
办公技巧(5)
编码知识(8)
创意&想法(2)
开发感想(12)
理财(2)
其它开源库(13)
生活感想(23)
数据结构算法(1)
通信技术(8)
网络服务器开发(9)
游戏开发(4)
随笔档案
2012年7月 (1)
2011年9月 (1)
2011年8月 (1)
2011年5月 (2)
2011年4月 (1)
2011年1月 (9)
2010年12月 (6)
2010年11月 (1)
2010年10月 (3)
2010年9月 (12)
2010年8月 (7)
2010年7月 (1)
2009年10月 (2)
2009年9月 (3)
2009年8月 (1)
2009年3月 (1)
2009年2月 (5)
2009年1月 (6)
2008年12月 (2)
2008年11月 (1)
2008年10月 (1)
2008年9月 (1)
2008年7月 (9)
2008年6月 (10)
2008年5月 (13)
2008年4月 (2)
2008年3月 (3)
2008年1月 (1)
2007年11月 (5)
2007年9月 (1)
2007年8月 (5)
2007年7月 (3)
2007年6月 (2)
2007年5月 (4)
2007年4月 (20)
2007年3月 (6)
文章分类
设计模式
文章档案
2007年3月 (3)
好友博客
LOGOS
搜索
积分与排名
积分 - 232307
排名 - 107
最新评论
1. re: C++实现的MD5算法
你这代码功底也够烂了,你多测试几次,内存哗哗的流...
--热心网页
2. re: std::queue的front的问题[未登录]
在c++中int并不是类,没有析构,是值拷贝。
你换std::string试试,准挂。
--星爷
3. re: mysql下如何执行sql脚本【转】[未登录]
Thanks!
--me
4. re: ldconfig几个需要注意的地方 zhuan
学习了,收藏
--thebye85
5. re: 体验RakNet的RPC3
评论内容较长,点击标题查看
--雅歌
阅读排行榜
1. mysql下如何执行sql脚本【转】(14938)
2. 怪异的boost,fatal error LNK1104: 无法打开文件“libboost_system-vc80-mt-gd-1_35.lib”(11364)
3. boost interprocess之message queue(7036)
4. 【ZT】ADSL大型技术专题(图文)(6889)
5. VOIP开源项目源码地址(二) ---[voip涉及到的所有的资料]【转帖】(5416)
评论排行榜
1. Buffer类就应该简单,直观(16)
2. 怪异的boost,fatal error LNK1104: 无法打开文件“libboost_system-vc80-mt-gd-1_35.lib”(13)
3. 对基本类型的再包装,方便了移植(12)
4. 自己造的一个线程类(12)
5. 游戏害惨了我多少同学(10)
tinyxml 的使用,转
TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器, 用来读写配置文件是最好的,可从
http://www.grinninglizard.com/tinyxml/index.html
这里下载。构建TinyXML 时可以选择是否支持STL, 一般建议选择支持STL。TinyXml的源码包里提供了VC6的工程文件,直接用它就可以生成静态库。然后把tinyxml.h, tinystr.h和lib拷到你工程下, 就可以用了。要注意的是, 如果需要STL支持,在你的工程里要定义一个宏TIXML_USE_STL, 然后把下面代码添加到你的代码里, 这段是摘自TinyXML自带的例子。
#ifdef TIXML_USE_STL
#include
<
iostream
>
#include
<
sstream
>
using
namespace
std;
#else
#include
<
stdio.h
>
#endif
#if
defined( WIN32 ) && defined( TUNE )
#include
<
crtdbg.h
>
_CrtMemState startMemState;
_CrtMemState endMemState;
#endif
我参考了网上的有关TinyXML的文章, 写了一个读写XML的例子,代码如下:
#include
"
tinyxml.h
"
#ifdef TIXML_USE_STL
#include
<
iostream
>
#include
<
sstream
>
using
namespace
std;
#else
#include
<
stdio.h
>
#endif
#if
defined( WIN32 ) && defined( TUNE )
#include
<
crtdbg.h
>
_CrtMemState startMemState;
_CrtMemState endMemState;
#endif
#pragma
comment(lib, "tinyxmld_STL.lib")
int
WriteXML() ;
int
ReadXML() ;
//
读取内存里的一段XML
int
ReadXML2() ;
int
main(
int
argc,
char
*
argv[])
...
{
cout
<<
"
开始测试!
"
<<
endl;
WriteXML() ;
ReadXML() ;
ReadXML2() ;
cout
<<
"
结束测试!
"
<<
endl ;
return
0
;
}
int
WriteXML()
...
{
TiXmlDocument xmlDoc(
"
test.xml
"
);
//
建立一个XML文件
TiXmlDeclaration Declaration(
"
1.0
"
,
"
gb2312
"
,
"
yes
"
);
//
声明XML的属性
xmlDoc.InsertEndChild( Declaration );
//
写入基本的XML头结构
TiXmlNode
*
pNode
=
NULL;
TiXmlElement
*
pRootElm
=
NULL;
TiXmlElement
*
pChildeElm
=
NULL;
TiXmlElement
*
pItemElm
=
NULL;
TiXmlText
*
pText
=
NULL;
//
一个指向Text的指针
pText
=
new
TiXmlText(
"
good
"
) ;
pRootElm
=
new
TiXmlElement(
"
todo
"
);
pNode
=
xmlDoc.InsertEndChild(
*
pRootElm) ;
pRootElm
=
pNode
->
ToElement() ;
pChildeElm
=
new
TiXmlElement(
"
child1
"
) ;
pChildeElm
->
SetAttribute(
"
num
"
,
9
) ;
pNode
=
pRootElm
->
InsertEndChild(
*
pChildeElm) ;
TiXmlElement
*
pChildeElm1
=
NULL;
pChildeElm1
=
pNode
->
ToElement() ;
pChildeElm1
->
InsertEndChild(
*
pText) ;
delete pChildeElm ;
pChildeElm
=
NULL ;
pChildeElm
=
new
TiXmlElement(
"
child2
"
) ;
pChildeElm
->
SetAttribute(
"
num
"
,
10
) ;
pNode
=
pRootElm
->
InsertBeforeChild (pChildeElm1,
*
pChildeElm) ;
TiXmlElement
*
pChildeElm2
=
NULL;
pChildeElm2
=
pNode
->
ToElement() ;
pChildeElm2
->
InsertEndChild(
*
pText) ;
xmlDoc.Print() ;
xmlDoc.SaveFile();
//
把XML文件写入硬盘
return
0
;
}
int
ReadXML()
...
{
cout
<<
endl ;
cout
<<
"
开始read XML
"
<<
endl ;
TiXmlDocument xmlDoc(
"
test.xml
"
);
xmlDoc.LoadFile() ;
TiXmlElement
*
xmlRootElement
=
0
;
TiXmlElement
*
xmlSubElement
=
0
;
TiXmlNode
*
pNode
=
NULL;
pNode
=
xmlDoc.FirstChild(
"
todo
"
) ;
xmlRootElement
=
pNode
->
ToElement() ;
if
(xmlRootElement)
...
{
pNode
=
xmlRootElement
->
FirstChild(
"
child1
"
) ;
xmlSubElement
=
pNode
->
ToElement() ;
cout
<<
xmlSubElement
->
Value()
<<
endl ;
cout
<<
xmlSubElement
->
Attribute(
"
num
"
)
<<
endl ;
cout
<<
xmlSubElement
->
GetText()
<<
endl ;
}
else
...
{
cout
<<
"
找不到根元素
"
<<
endl ;
}
cout
<<
"
结束read XML
"
<<
endl ;
return
0
;
}
int
ReadXML2()
...
{
cout
<<
endl ;
cout
<<
"
开始read XML
"
<<
endl ;
const
char
*
demoEnd
=
"
<?xml version="1.0" encoding="gb2312" standalone="yes" ?>
"
"
<todo>
"
"
<child2 num="10">good</child2>
"
"
<child1 num="9">good</child1>
"
"
</todo>
"
;
TiXmlDocument xmlDoc;
xmlDoc.Parse( demoEnd ) ;
TiXmlElement
*
xmlRootElement
=
0
;
TiXmlElement
*
xmlSubElement
=
0
;
TiXmlNode
*
pNode
=
NULL;
pNode
=
xmlDoc.FirstChild(
"
todo
"
) ;
xmlRootElement
=
pNode
->
ToElement() ;
if
(xmlRootElement)
...
{
pNode
=
xmlRootElement
->
FirstChild(
"
child1
"
) ;
xmlSubElement
=
pNode
->
ToElement() ;
cout
<<
xmlSubElement
->
Value()
<<
endl ;
cout
<<
xmlSubElement
->
Attribute(
"
num
"
)
<<
endl ;
cout
<<
xmlSubElement
->
GetText()
<<
endl ;
}
else
...
{
cout
<<
"
找不到根元素
"
<<
endl ;
}
cout
<<
"
结束read XML
"
<<
endl ;
return
0
;
posted on 2007-04-04 17:14
true
阅读(1186)
评论(2)
编辑
收藏
引用
所属分类:
其它开源库
Feedback
#
re: tinyxml 的使用,转
2007-05-14 08:03
zhangyingshi
突然问您个问题问题有些唐突,敬请您解答
关于tinyxml
在VC6.0中使用,源程序使用的是多线程release编译所以我把tinyxml下载文件夹里的tinyxml_lib.dsp也用多线程release编译生成了tinyxmld.lib,同两个头文件加入到程序中加入到程序中,函数调用都正常.但每次loadfile时候都失败,跟踪调试发现每次loadfile都探出一个对话框让我指定vc60.pdb的位置,制定了几次都不对
想问问您多线程编译是不是这样就可以?还是我使用tinyxml方法有问题
那个对话框是怎么回事。
该指定那个?
等待着您的回答。谢谢
回复
更多评论
#
re: tinyxml 的使用,转
2007-05-14 11:55
eXile
作为一个测试程序, WriteXML 中对象的管理很混乱, 也许是lz不拘小节, 但会给人误导...
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
给ZThread提供一个patch
C++中使用C#的App.Config配置文件
让人有点郁闷的PHP
国内一个不错的开源镜像
cmarkup【转】
开源数据库概览【转】
92个经典开源项目集锦(包括URL)【转】
TinyXml总结
tinyxml 的使用,转
tinyxml 使用
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © true