﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-网络服务器软件开发/中间件开发，关注ACE/ICE/boost-随笔分类-其它开源库</title><link>http://www.cppblog.com/true/category/3806.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 29 May 2011 13:43:42 GMT</lastBuildDate><pubDate>Sun, 29 May 2011 13:43:42 GMT</pubDate><ttl>60</ttl><item><title>给ZThread提供一个patch</title><link>http://www.cppblog.com/true/archive/2011/05/29/147632.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sun, 29 May 2011 09:44:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2011/05/29/147632.html</guid><wfw:comment>http://www.cppblog.com/true/comments/147632.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2011/05/29/147632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/147632.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/147632.html</trackback:ping><description><![CDATA[&nbsp;<a href="http://zthread.sourceforge.net/">http://zthread.sourceforge.net/</a>&nbsp;&nbsp;<br />&nbsp;这个库设计的很小巧，优雅，符合我个人的审美观，linux下通过编译时会出现错误，主要是由于gcc的老语法所致，由于库的作者2005年停止了更新，所以这一块一直没改，这里提供一个patch，其实很简单，就是替换了下几个语句，内容为：<span class="Apple-style-span" style="font-size: 13px; ">&nbsp; &nbsp; &nbsp;</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">#(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;put&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;file&nbsp;under&nbsp;top&nbsp;ZThread&nbsp;directory,such&nbsp;</span><span style="color: #0000FF; ">as</span><span style="color: #000000; ">&nbsp;ZThread</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2.3</span><span style="color: #000000; ">.</span><span style="color: #000000; ">2</span><span style="color: #000000; ">/</span><span style="color: #000000; ">,and<br />#(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;cd&nbsp;ZThread</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2.3</span><span style="color: #000000; ">.</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />#(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">zthread</span><span style="color: #000000; ">-</span><span style="color: #000000; ">patch.sh&nbsp;&nbsp;(chmod&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">x&nbsp;zthread</span><span style="color: #000000; ">-</span><span style="color: #000000; ">patch.sh&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;necessary)<br />#(</span><span style="color: #000000; ">3</span><span style="color: #000000; ">)&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">configure<br />#(</span><span style="color: #000000; ">4</span><span style="color: #000000; ">)&nbsp;make<br /><br />sed&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/if(!isDisabled())/s/^.*/&nbsp;&nbsp;&nbsp;&nbsp;if(!this-&gt;isDisabled())/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">include</span><span style="color: #000000; ">/</span><span style="color: #000000; ">zthread</span><span style="color: #000000; ">/</span><span style="color: #000000; ">Guard.h<br />sed&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/waiterArrived(self)/s/^.*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;waiterArrived(self);/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">src</span><span style="color: #000000; ">/</span><span style="color: #000000; ">MutexImpl.h<br />sed&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/waiterDeparted(self)/s/^.*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;waiterDeparted(self);/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">src</span><span style="color: #000000; ">/</span><span style="color: #000000; ">MutexImpl.h<br />sed&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/ownerAcquired(self)/s/^.*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;ownerAcquired(self);/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">src</span><span style="color: #000000; ">/</span><span style="color: #000000; ">MutexImpl.h<br />sed&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/ownerReleased(impl)/s/^.*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;ownerReleased(impl);/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">src</span><span style="color: #000000; ">/</span><span style="color: #000000; ">MutexImpl.h</span></div><div></div><img src ="http://www.cppblog.com/true/aggbug/147632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2011-05-29 17:44 <a href="http://www.cppblog.com/true/archive/2011/05/29/147632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中使用C#的App.Config配置文件</title><link>http://www.cppblog.com/true/archive/2010/12/29/137630.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Tue, 28 Dec 2010 16:25:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2010/12/29/137630.html</guid><wfw:comment>http://www.cppblog.com/true/comments/137630.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2010/12/29/137630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/137630.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/137630.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 自从做公司的SNS社区以来，写了不少的C#代码，与C++相比，C#是易于使用的，开发效率提高很多倍，其中印象比较深刻的是，在一个C#工程中，可以通过向导添加配置文件，默认文件名为App.Config,是XML格式，一般内容为：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">xml&nbsp;version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">utf-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">?&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">configuration</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">appSettings</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">add&nbsp;key</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Ip</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">localhost</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">add&nbsp;key</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Port</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">8888</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">add&nbsp;key</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ServiceName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Indexer</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">appSettings</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">configuration</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
通过在appSettings里面添加add元素，即可实现通常的配置功能，更重要的是，可以进一步扩展为多级的树形结构，与Ini格式相比，更直观，可读性更强，下面是基于CMarkup（<a href="http://www.firstobject.com/">http://www.firstobject.com/</a>）的一个简单实现：<br>头文件如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#pragma&nbsp;once<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">map</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;AppConfig<br><img id=Codehighlighter1_65_242_Open_Image onclick="this.style.display='none'; Codehighlighter1_65_242_Open_Text.style.display='none'; Codehighlighter1_65_242_Closed_Image.style.display='inline'; Codehighlighter1_65_242_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_65_242_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_65_242_Closed_Text.style.display='none'; Codehighlighter1_65_242_Open_Image.style.display='inline'; Codehighlighter1_65_242_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_65_242_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_65_242_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;AppConfig(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">AppConfig(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetInt(std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;key);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GetString(std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;key);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::map</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">,std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;config_map_;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;AppConfig&nbsp;appConfig;</span></div>
源文件如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">AppConfig.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Markup.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>AppConfig&nbsp;appConfig;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>AppConfig::AppConfig(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_95_442_Open_Image onclick="this.style.display='none'; Codehighlighter1_95_442_Open_Text.style.display='none'; Codehighlighter1_95_442_Closed_Image.style.display='inline'; Codehighlighter1_95_442_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_95_442_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_442_Closed_Text.style.display='none'; Codehighlighter1_95_442_Open_Image.style.display='inline'; Codehighlighter1_95_442_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_95_442_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_95_442_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CMarkup&nbsp;parser;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">parser.Load(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">App.Config</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;))<br><img id=Codehighlighter1_151_166_Open_Image onclick="this.style.display='none'; Codehighlighter1_151_166_Open_Text.style.display='none'; Codehighlighter1_151_166_Closed_Image.style.display='inline'; Codehighlighter1_151_166_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_151_166_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_166_Closed_Text.style.display='none'; Codehighlighter1_151_166_Open_Image.style.display='inline'; Codehighlighter1_151_166_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_151_166_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_151_166_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(parser.FindChildElem(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">appSettings</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br><img id=Codehighlighter1_211_438_Open_Image onclick="this.style.display='none'; Codehighlighter1_211_438_Open_Text.style.display='none'; Codehighlighter1_211_438_Closed_Image.style.display='inline'; Codehighlighter1_211_438_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_211_438_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_211_438_Closed_Text.style.display='none'; Codehighlighter1_211_438_Open_Image.style.display='inline'; Codehighlighter1_211_438_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_211_438_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_211_438_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser.IntoElem();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(parser.FindChildElem(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">add</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br><img id=Codehighlighter1_274_413_Open_Image onclick="this.style.display='none'; Codehighlighter1_274_413_Open_Text.style.display='none'; Codehighlighter1_274_413_Closed_Image.style.display='inline'; Codehighlighter1_274_413_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_274_413_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_274_413_Closed_Text.style.display='none'; Codehighlighter1_274_413_Open_Image.style.display='inline'; Codehighlighter1_274_413_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_274_413_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_274_413_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;key&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;parser.GetChildAttrib(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">key</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;parser.GetChildAttrib(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config_map_[key]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser.OutOfElem();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>AppConfig::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">AppConfig(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_473_475_Open_Image onclick="this.style.display='none'; Codehighlighter1_473_475_Open_Text.style.display='none'; Codehighlighter1_473_475_Closed_Image.style.display='inline'; Codehighlighter1_473_475_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_473_475_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_473_475_Closed_Text.style.display='none'; Codehighlighter1_473_475_Open_Image.style.display='inline'; Codehighlighter1_473_475_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_473_475_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_473_475_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;AppConfig::GetInt(&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;key&nbsp;)<br><img id=Codehighlighter1_519_641_Open_Image onclick="this.style.display='none'; Codehighlighter1_519_641_Open_Text.style.display='none'; Codehighlighter1_519_641_Closed_Image.style.display='inline'; Codehighlighter1_519_641_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_519_641_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_519_641_Closed_Text.style.display='none'; Codehighlighter1_519_641_Open_Image.style.display='inline'; Codehighlighter1_519_641_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_519_641_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_519_641_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(config_map_.find(key)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;config_map_.end())<br><img id=Codehighlighter1_571_615_Open_Image onclick="this.style.display='none'; Codehighlighter1_571_615_Open_Text.style.display='none'; Codehighlighter1_571_615_Closed_Image.style.display='inline'; Codehighlighter1_571_615_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_571_615_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_571_615_Closed_Text.style.display='none'; Codehighlighter1_571_615_Open_Image.style.display='inline'; Codehighlighter1_571_615_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_571_615_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_571_615_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;atoi(config_map_[key].c_str());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_624_639_Open_Image onclick="this.style.display='none'; Codehighlighter1_624_639_Open_Text.style.display='none'; Codehighlighter1_624_639_Closed_Image.style.display='inline'; Codehighlighter1_624_639_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_624_639_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_624_639_Closed_Text.style.display='none'; Codehighlighter1_624_639_Open_Image.style.display='inline'; Codehighlighter1_624_639_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_624_639_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_624_639_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;AppConfig::GetString(&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;key&nbsp;)<br><img id=Codehighlighter1_696_805_Open_Image onclick="this.style.display='none'; Codehighlighter1_696_805_Open_Text.style.display='none'; Codehighlighter1_696_805_Closed_Image.style.display='inline'; Codehighlighter1_696_805_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_696_805_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_696_805_Closed_Text.style.display='none'; Codehighlighter1_696_805_Open_Image.style.display='inline'; Codehighlighter1_696_805_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_696_805_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_696_805_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(config_map_.find(key)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;config_map_.end())<br><img id=Codehighlighter1_748_778_Open_Image onclick="this.style.display='none'; Codehighlighter1_748_778_Open_Text.style.display='none'; Codehighlighter1_748_778_Closed_Image.style.display='inline'; Codehighlighter1_748_778_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_748_778_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_748_778_Closed_Text.style.display='none'; Codehighlighter1_748_778_Open_Image.style.display='inline'; Codehighlighter1_748_778_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_748_778_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_748_778_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;config_map_[key];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_787_803_Open_Image onclick="this.style.display='none'; Codehighlighter1_787_803_Open_Text.style.display='none'; Codehighlighter1_787_803_Closed_Image.style.display='inline'; Codehighlighter1_787_803_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_787_803_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_787_803_Closed_Text.style.display='none'; Codehighlighter1_787_803_Open_Image.style.display='inline'; Codehighlighter1_787_803_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_787_803_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_787_803_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>测试代码为：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;MarkupTest.cpp&nbsp;:&nbsp;定义控制台应用程序的入口点。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">AppConfig.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br><img id=Codehighlighter1_162_309_Open_Image onclick="this.style.display='none'; Codehighlighter1_162_309_Open_Text.style.display='none'; Codehighlighter1_162_309_Closed_Image.style.display='inline'; Codehighlighter1_162_309_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_162_309_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_162_309_Closed_Text.style.display='none'; Codehighlighter1_162_309_Open_Image.style.display='inline'; Codehighlighter1_162_309_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_162_309_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_162_309_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;appConfig.GetString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Ip</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-----</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;appConfig.GetInt(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Port</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">----</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;appConfig.GetString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ServiceName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/true/aggbug/137630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2010-12-29 00:25 <a href="http://www.cppblog.com/true/archive/2010/12/29/137630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让人有点郁闷的PHP</title><link>http://www.cppblog.com/true/archive/2010/09/18/126999.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sat, 18 Sep 2010 09:31:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2010/09/18/126999.html</guid><wfw:comment>http://www.cppblog.com/true/comments/126999.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2010/09/18/126999.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/126999.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/126999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: PHP 开发web 服务&nbsp;&nbsp;<a href='http://www.cppblog.com/true/archive/2010/09/18/126999.html'>阅读全文</a><img src ="http://www.cppblog.com/true/aggbug/126999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2010-09-18 17:31 <a href="http://www.cppblog.com/true/archive/2010/09/18/126999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国内一个不错的开源镜像</title><link>http://www.cppblog.com/true/archive/2010/07/29/121584.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 29 Jul 2010 07:39:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2010/07/29/121584.html</guid><wfw:comment>http://www.cppblog.com/true/comments/121584.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2010/07/29/121584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/121584.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/121584.html</trackback:ping><description><![CDATA[<a href="http://mirrors.sohu.com/">http://mirrors.sohu.com/</a><br>非常不错，还有一些电子书
<img src ="http://www.cppblog.com/true/aggbug/121584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2010-07-29 15:39 <a href="http://www.cppblog.com/true/archive/2010/07/29/121584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cmarkup【转】</title><link>http://www.cppblog.com/true/archive/2007/11/15/36723.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 15 Nov 2007 14:02:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/11/15/36723.html</guid><wfw:comment>http://www.cppblog.com/true/comments/36723.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/11/15/36723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/36723.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/36723.html</trackback:ping><description><![CDATA[<p><font color=#ff0000>(一)&nbsp;先讲一下XML中的物殊字符，手动填写时注意一下。</font></p>
<p>字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字符实体<br>&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;amp;或&amp;<br>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;apos;或'<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;gt;或&gt;<br>&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;或&amp;&lt;<br>"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;quot;或"</p>
<p><font color=#ff0000>(二)&nbsp;CMarkup类的源代码。</font></p>
<p>这是目前的最新版本；</p>
<p>这是官网示例文件，取出里面的Markup.cpp和Markup.h，导入你的工程里面，CMarkup类就可以用了；</p>
<p>下载地址：<a href="http://www.firstobject.com/Markup83.zip"><u><font color=#0000ff>http://www.firstobject.com/Markup83.zip</font></u></a></p>
<p><font color=#ff0000>(三)&nbsp;创建一个XML文档。</font></p>
<p>CMarkup&nbsp;xml;<br>xml.AddElem(&nbsp;"ORDER"&nbsp;);<br>xml.AddChildElem(&nbsp;"ITEM"&nbsp;);<br>xml.IntoElem();<br>xml.AddChildElem(&nbsp;"SN",&nbsp;"132487A-J"&nbsp;);<br>xml.AddChildElem(&nbsp;"NAME",&nbsp;"crank&nbsp;casing"&nbsp;);<br>xml.AddChildElem(&nbsp;"QTY",&nbsp;"1"&nbsp;);<br>xml.Save("c:\\<font color=#0000ff>UserInfo</font>.xml");<br></p>
<p>效果如下：</p>
<pre><font color=#0000ff>&lt;ORDER&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;ITEM&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;SN&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">132487A-J</font><font color=#0000ff>&lt;/SN&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">crank&nbsp;casing</font><font color=#0000ff>&lt;/NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;QTY&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">1</font><font color=#0000ff>&lt;/QTY&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/ITEM&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/ORDER&gt;</font></pre>
<pre><font color=#ff0000>(四)&nbsp;浏览特定元素</font></pre>
<pre>CMarkup&nbsp;xml;
<font color=#0000ff>xml.Load("UserInfo.xml");<br></font><font color=#0000ff>while</font>&nbsp;(&nbsp;xml.FindChildElem("ITEM")&nbsp;)
{
&nbsp;&nbsp;&nbsp;&nbsp;xml.IntoElem();
&nbsp;&nbsp;&nbsp;&nbsp;xml.FindChildElem(&nbsp;"SN"&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;csSN&nbsp;=&nbsp;xml.GetChildData();
&nbsp;&nbsp;&nbsp;&nbsp;xml.FindChildElem(&nbsp;"QTY"&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff>int</font>&nbsp;nQty&nbsp;=&nbsp;atoi(&nbsp;xml.GetChildData()&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;xml.OutOfElem();
}</pre>
<pre><font color=#ff0000>(五)增加元素和属性</font></pre>
<pre>添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。</pre>
<pre>CMarkup&nbsp;xml;</pre>
<pre>xml.Load("c:\\<font color=#0000ff>UserInfo</font>.xml");
xml.AddElem(&nbsp;"ORDER"&nbsp;);
xml.IntoElem();&nbsp;<font color=#008000>//&nbsp;进入&nbsp;ORDER<br></font>
<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;xml.AddElem(&nbsp;"ITEM"&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;xml.IntoElem();&nbsp;<font color=#008000>//&nbsp;进入&nbsp;ITEM</font>
&nbsp;&nbsp;&nbsp;&nbsp;xml.AddElem(&nbsp;"SN",&nbsp;"<strong>4238764-A"</strong>&nbsp;);&nbsp;//添加元素
&nbsp;&nbsp;&nbsp;&nbsp;xml.AddElem(&nbsp;"NAME",&nbsp;"<strong>bearing"</strong>&nbsp;);//添加元素
&nbsp;&nbsp;&nbsp;&nbsp;xml.AddElem(&nbsp;"QTY",&nbsp;"<strong>15"</strong>&nbsp;);//添加元素
&nbsp;&nbsp;&nbsp;&nbsp;xml.OutOfElem();&nbsp;<font color=#008000>//&nbsp;退出&nbsp;ITEM&nbsp;</font></pre>
<pre>xml.AddElem(&nbsp;"SHIPMENT"&nbsp;);
xml.IntoElem();&nbsp;<font color=#008000>//&nbsp;进入&nbsp;SHIPMENT</font>
xml.AddElem(&nbsp;"POC"&nbsp;);//添加元素
xml.SetAttrib(&nbsp;"type",&nbsp;"<strong>non-emergency</strong>");//添加属性
xml.IntoElem();&nbsp;<font color=#008000>//&nbsp;进入&nbsp;POC</font>
xml.AddElem(&nbsp;"NAME",&nbsp;"<strong>John&nbsp;Smith</strong>");//添加元素
xml.AddElem(&nbsp;"TEL",&nbsp;"555-1234");//添加元素
xml.Save("c:\\<font color=#0000ff>UserInfo</font>.xml");</pre>
<p>&nbsp;</p>
<p><font face="Courier New">效果如下：</font></p>
<pre><font color=#0000ff>&lt;ORDER&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;ITEM&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;SN&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">132487A-J</font><font color=#0000ff>&lt;/SN&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">crank&nbsp;casing</font><font color=#0000ff>&lt;/NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;QTY&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">1</font><font color=#0000ff>&lt;/QTY&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/ITEM&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;ITEM&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;SN&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">4238764-A</font><font color=#0000ff>&lt;/SN&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">bearing</font><font color=#0000ff>&lt;/NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;QTY&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">15</font><font color=#0000ff>&lt;/QTY&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/ITEM&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;SHIPMENT&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;POC</font><font color=#be3232>&nbsp;type</font><font color=#0000ff>="</font><font style="FONT-WEIGHT: bold; COLOR: black">non-emergency</font><font color=#0000ff>"&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">John&nbsp;Smith</font><font color=#0000ff>&lt;/NAME&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;TEL&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">555-1234</font><font color=#0000ff>&lt;/TEL&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/POC&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/SHIPMENT&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black">
</font><font color=#0000ff>&lt;/ORDER&gt;</font><font style="FONT-WEIGHT: bold; COLOR: black"></font></pre>
<p><font color=#ff0000>(六)&nbsp;修改元素和属性</font></p>
<p>如将POC中的属性type改成：change;</p>
<p>元素TEL改成：123456789</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMarkup&nbsp;xml;<br>&nbsp;if&nbsp;(xml.Load("UserInfo.xml"))<br>&nbsp;{<br>&nbsp;&nbsp;CString&nbsp;strUserID&nbsp;=&nbsp;_T("");<br>&nbsp;&nbsp;xml.ResetMainPos();<br>&nbsp;&nbsp;if&nbsp;(xml.FindChildElem("SHIPMENT"))<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;xml.IntoElem();<br>&nbsp;&nbsp;&nbsp;if&nbsp;(xml.FindChildElem("POC"))<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;xml.IntoElem();<br>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;str_type=xml.GetAttrib("type");<br>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(str_type);<br>&nbsp;&nbsp;&nbsp;&nbsp;xml.SetAttrib("type","change");<br>&nbsp;&nbsp;&nbsp;&nbsp;strUserID&nbsp;=&nbsp;xml.GetData();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(xml.FindChildElem("TEL"))<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xml.IntoElem();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xml.SetData("123456789");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xml.Save("UserInfo.xml");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<p><font color=#ff0000>(七)删除元素：</font></p>
<p>删除SN=132487A-J的项目。</p>
<p>CMarkup&nbsp;xml;<br>&nbsp;if&nbsp;(xml.Load("UserInfo.xml"))<br>&nbsp;{<br>&nbsp;&nbsp;CString&nbsp;strUserID&nbsp;=&nbsp;_T("");<br>&nbsp;&nbsp;xml.ResetMainPos();<br>&nbsp;&nbsp;if&nbsp;(xml.FindChildElem("ITEM"))<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;xml.IntoElem();<br>&nbsp;&nbsp;&nbsp;CString&nbsp;str_sn;<br>&nbsp;&nbsp;&nbsp;xml.FindChildElem("SN");<br>&nbsp;&nbsp;&nbsp;str_sn=xml.GetChildData();<br>&nbsp;&nbsp;&nbsp;if(str_sn=="132487A-J")<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;xml.RemoveElem();<br>&nbsp;&nbsp;&nbsp;&nbsp;xml.Save("UserInfo.xml");<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<img src ="http://www.cppblog.com/true/aggbug/36723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-11-15 22:02 <a href="http://www.cppblog.com/true/archive/2007/11/15/36723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源数据库概览【转】</title><link>http://www.cppblog.com/true/archive/2007/08/20/30415.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Mon, 20 Aug 2007 04:13:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/08/20/30415.html</guid><wfw:comment>http://www.cppblog.com/true/comments/30415.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/08/20/30415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/30415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/30415.html</trackback:ping><description><![CDATA[<div class=postTitle twffan="done"><a href="http://blog.csdn.net/imdt/articles/411994.aspx"><img height=13 src="http://blog.csdn.net/images/zhuan.gif" width=15 border=0 twffan="done">&nbsp;开源数据库概览</a> </div>
<div class=postText twffan="done">
<p><strong>开源数据库概览</strong></p>
<p><strong></strong></p>
<p>开源世界真是太奇妙了，虽然不排除卑鄙无耻的直接盗用并贯为自己的产品，但开源可以无私到随便你怎样用。 <br><br>接触开源有很长的一段时间了，先是学习别人的，然后还参与了开源，在sf.net上，我主持和参与了数个开源项目，当然，都不是大型的项目，只是尝试一下。 <br><br>我所关注的开源项目方面很多，每方面都有很多优秀的作品，我将会在接下来的系列随笔中介绍，这次介绍数据库。 <br><br>这个星球上的数据库实在不胜枚举，这里只列一些我接触过的常见的。 <br><br>可以稍微夸张点说，有交互的应用，起码得用一下数据保存，即便是自定义结构的数据保存，还是最常见的INI、XML等，都可以算是&#8220;数据库&#8221;，真正点的，如DBase系列、FoxBase、FoxPro、MSAccess、InterBase、MS SQL Server、Oracle、DB2等，这些是商业化的数据库，前面几个只能算是数据库，后面几个是RMDBS（关系型数据库管理系统）。 <br><br>对应商业化的，有开源的：<a href="http://www.sqlite.org/"><font color=#1d58d1>SQLite</font></a>、<a href="http://www.simplesql.org/"><font color=#1d58d1>SimpleSQL</font></a>、<a href="http://www.sleepycat.com/"><font color=#1d58d1>Berkely DB</font></a>、<a href="http://www.minosse.com/"><font color=#1d58d1>Minosse</font></a>、<a href="http://firebird.sourceforge.net/"><font color=#1d58d1>Firebird</font></a>( 前身是是Borland公司的InterBase)、<a href="http://www.postgresql.org/"><font color=#1d58d1>PostgreSQL</font></a>、<a href="http://www.mysql.com/"><font color=#1d58d1>MySQL</font></a>等。 <br><br>□<a href="http://www.sqlite.org/"><font color=#1d58d1>SQLite</font></a>：大家可以看我的SQLite系列随笔，C编写的，可以跨操作平台，支持大部分ANSI SQL 92，它是嵌入式的轻量级关系形数据库引擎，只需要一个DLL，体积为250k，数据库也只是一个文件，零配置，便可工作。既然开源，你甚至可以把它嵌入你的程序中。核心开发人员只有一个，最近加入了另外一个，也就是2个人而已，实在佩服，目前发展到3.1.0，相当高效稳定，有开源驱动在sourceforge.net上有其ADO.NET Data Provider for SQLite ：<a href="https://sourceforge.net/projects/adodotnetsqlite/" target=_new><font color=#1a8bc8>https://sourceforge.net/projects/adodotnetsqlite/</font></a> 。 <br><br>□<a href="http://www.simplesql.org/"><font color=#1d58d1>SimpleSQL</font></a>：相对<a href="http://www.sqlite.org/"><font color=#1d58d1>SQLite</font></a>要大几倍，但也是轻量级的，功能稍微强大一点，C++编写，有OLE、Java等版本。 <br><br>□<a href="http://www.sleepycat.com/"><font color=#1d58d1>Berkely DB</font></a>：C++编写的大型关系型数据库系统，还额外地支持XML(把XML当成数据库)，号称2百万的安装量，MySQL也只不过号称5百万安装量而已，跨平台。 <br><br>□<a href="http://www.minosse.com/"><font color=#1d58d1>Minosse</font></a>：纯C#编写的大型关系型数据库系统，理想是超越MS SQL Server！最新版本：<a href="http://www.minosse.com/news/230804.htm"><font color=#1d58d1>0.2.0</font></a>，真难得，纯Java写的看得多了，纯C#的，不是移植别人的，还是第一个，佩服作者：包含C/S和嵌入式版本，并可跨越大部分平台，因为它不用Windows的东西，可以在Mono下编译。 <br><br>□<a href="http://firebird.sourceforge.net/"><font color=#1d58d1>Firebird</font></a>：这个东西太牛了，目前有<a href="http://firebird.sourceforge.net/index.php?op=devel&amp;sub=engine&amp;id=rnotes0152_09&amp;nosb=1"><font color=#1d58d1>1.5稳定版本</font></a>已经拥有大量特性，完全支持ANSI SQL92、98等，一些超酷的特性让人疯狂(<a href="http://firebird.sourceforge.net/guide/FBFactsheet.html"><font color=#1d58d1>1.0特性</font></a>、<a href="http://firebird.sourceforge.net/guide/FB15_New.html"><font color=#1d58d1>1.5特性</font></a>，<a href="http://firebird.sourceforge.net/pdfmanual/Firebird-1.5-QuickStart.pdf"><font color=#1d58d1>从这里开始研究</font></a>)，主要开发人员是一个俄罗斯人，目前开发队伍已经扩大到近100人，有3种模式，单机独立，典型C/S，超级服务器。2.0版本和3.0版本将在近期推出，看完其<a href="http://firebird.sourceforge.net/index.php?op=devel&amp;sub=engine&amp;id=roadmap"><font color=#1d58d1>路线图</font></a>(2.0、3.0)你就会疯掉。有<a href="http://firebird.sourceforge.net/index.php?op=devel&amp;sub=netprovider"><font color=#1d58d1>.NET驱动</font></a>，目前是<a href="http://firebird.sourceforge.net/index.php?op=files&amp;id=netprovider"><font color=#1d58d1>1.7beta</font></a>版。主要特性：&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆A.C.I.D；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆MGA(任何版本的引擎都可以处理同一数据库记录)；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆PSQL(存储过程)超级强大，ms sql相对的太次，它啥都能在服务器端实现并推送到客户端成为强大的报表，存储过程；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆触发器都可以在客户端获取监控追踪；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆自动只读模式；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆创新的事务保证绝对不会出错；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆24*7运行中仍然可以随时备份数据库；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆统一触发器：任何操作都可以让某表唯一的触发器来总控；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆大部分语言都可以写plug-in，并直接在存储过程中调用函数；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆c-&gt;c++，更加少的代码但更加快的速度；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆3种运行模式，甚至可以嵌入式；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆主流语言都可以调用它；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆动态sql执行；&nbsp; <br>&nbsp;&nbsp;&nbsp; ◆事务保存点； <br><br>□<a href="http://www.postgresql.org/"><font color=#1d58d1>PostgreSQL</font></a>：POSTGRES数据库的后开源版本，号称拥有任何其他数据库没有的大量新特性，似乎目标是要做超大型的OO关系型数据库系统，目前已经发展到<a href="http://www.postgresql.org/docs/whatsnew"><font color=#1d58d1>8.0</font></a>，有<a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php"><font color=#1d58d1>.NET驱动</font></a>，<a href="http://www.pgsqldb.org/"><font color=#1d58d1>中文官方网站</font></a>有详细介绍。 <br><br>□<a href="http://www.mysql.com/"><font color=#1d58d1>MySQL</font></a>：这个，不用说了吧？号称全球最受欢迎的开源数据库，但让我奇怪的是，<a href="http://www.postgresql.org/"><font color=#1d58d1>PostgreSQL</font></a>都有简体中文的支持：包括内核、管理工具、QA等等，在最新版本<a href="http://www.mysql.com/"><font color=#1d58d1>MySQL</font></a>中，我却没有发现... ，有<a href="http://dev.mysql.com/downloads/dotnet.html"><font color=#1d58d1>.NET驱动</font></a>，其中<a href="http://www.cnblogs.com/downloads/connector/net/1.0.html"><font color=#0000ff>MySQL Connector/Net</font></a>就是原来在sf.net上的ByteFX.Data项目，作者已经加入了MySQL团队，参看《<a id=viewpost1_TitleUrl href="http://www.cnblogs.com/unruledboy/archive/2004/09/20/45005.html"><font color=#800080>感慨 20 之开源的前途/钱图？（１数据库）</font></a>》。
<table cellSpacing=0 cellPadding=0 width=600 border=0>
    <tbody>
        <tr>
            <td align=middle height=10></td>
        </tr>
        <tr>
            <td>
            <table cellSpacing=0 cellPadding=0 width=600 border=0>
                <tbody>
                    <tr>
                        <td class=td1>
                        <table cellSpacing=0 cellPadding=0 width=600 border=0>
                            <tbody>
                                <tr>
                                    <td></td>
                                </tr>
                                <tr>
                                    <td height=10></td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                </tbody>
            </table>
            <table cellSpacing=0 cellPadding=0 width=600 border=0>
                <tbody>
                    <tr>
                        <td align=middle height=5></td>
                    </tr>
                    <tr align=right>
                        <td height=30><a href="javascript:SendMailto()"><img alt="" src="http://news.csdn.net/news/images/v_email.GIF" border=0 twffan="done"></a>&nbsp;&nbsp;<a href="javascript:doprint();"><img alt="" src="http://news.csdn.net/news/images/v_prinf.GIF" border=0 twffan="done"></a>&nbsp;&nbsp; <a href="http://news.csdn.net/news/newspl/22/22410.shtml"><img height=23 alt="" src="http://news.csdn.net/news/images/v_more.GIF" width=91 border=0 twffan="done"> </a></td>
                    </tr>
                    <tr>
                        <td align=middle height=5></td>
                    </tr>
                </tbody>
            </table>
            <table cellSpacing=0 cellPadding=0 width=600 border=0>
                <tbody>
                    <tr>
                        <td colSpan=2 height=20>&nbsp;&nbsp;&nbsp;&nbsp;<font color=#ff6633><strong>网友评论</strong></font></td>
                    </tr>
                    <tr bgColor=#f1f1f1>
                        <td vAlign=top align=right width=20><strong>RunEverywhere：</strong></td>
                        <td>&nbsp;&nbsp;纯Java写的数据库- -<br>&nbsp;&nbsp;<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;<br>&nbsp;&nbsp;纯Java数据库包括：<br>&nbsp;&nbsp;Informix， Cloudscape(也就是Apache Derby数据库)，JDataStore(Borland公司)，HSQLDB， db4o， PointBase(Oracle创始人开发)，<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Berkeley DB Java Edition 2.0 开源数据库等等。谁有证据证明Oracle和DB2中Java使用的比例请告知。只知Oracle和DB2中有大量的.class文件，但不知是否有C/C++开发的部分，毕竟java也能编译成.exe和.dll文件。<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Oracle数据库(使用了Java开发，但不知是否是纯Java)<br>&nbsp;&nbsp;www.oracle.com<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;DB2数据库(使用了Java开发，但不知是否是纯Java)：<br>&nbsp;&nbsp;www-306.ibm.com/software/data/db2/<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Informix数据库<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;IBM 在 2001 年七月初購併 Informix,將Informix 轉換為以Java 語言開發的環境之外，並採納 Informix<br>&nbsp;&nbsp;的資料複製功能，提升 DB2 災難復原與資料複製的能力<br>&nbsp;&nbsp;IBM 每年投資十億美元於資料庫管理軟體的研發工作，致力於強化資訊管理軟體解決方案的技術優勢與產品效能，去 ( 2003 ) 年並取得超過<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;230 項相關專利權；又於日前捐出價值超過八千五百萬美元的 Java 資料庫軟體 Cloudscape 給 Apache<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;http://www.ibm.com/news/tw/2004/11/tw_zh_20041119_linux.html<br>&nbsp;&nbsp;Apache Derby 是一种用 100% 纯 Java 编写的关系数据库。该项目最初被称作 Cloudscape&#8482;，IBM 于 2004 年 8 月将它捐献给了 Apache 基金组织<br>&nbsp;&nbsp;http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/dm-0505gibson/?ca=dwcn-newsletter-db2<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Cloudscape 开源数据库<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;於日前捐出價值超過八千五百萬美元的 Java 資料庫軟體 Cloudscape 給 Apache<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;http://www.ibm.com/news/tw/2004/11/tw_zh_20041119_linux.html<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;JDataStore数据库<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Borland公司出品：<br>&nbsp;&nbsp;www.borland.com/us/products/jdatastore/<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;HSQLDB开源数据库<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;http://hsqldb.sf.net<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Berkeley DB Java Edition 2.0 开源数据库<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;http://www.sleepycat.com/<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;db4o开源数据库<br>&nbsp;&nbsp;www.db4o.com/ <br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;还有一些Java数据库：<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;在全球最大的java开发者杂志上的一份对最受欢迎的Java数据库的调查：<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Best Enterprise Database:<br>&nbsp;&nbsp;<br>&nbsp;&nbsp; No Nominee<br>&nbsp;&nbsp; Berkeley DB Java Edition Sleepycat Software<br>&nbsp;&nbsp; Birdstep RDM Embedded 7.1 Birdstep Technology<br>&nbsp;&nbsp; Daffodil DB Daffodil Software Ltd.<br>&nbsp;&nbsp; db4o db4objects<br>&nbsp;&nbsp; EAC MySQL Cluster Emic Networks<br>&nbsp;&nbsp; HSQLDB HSQLDB Development Team<br>&nbsp;&nbsp; IBM DB2 Universal Database IBM<br>&nbsp;&nbsp; IBM Informix IDS v10 IBM<br>&nbsp;&nbsp; JDataStore 7 High Availability Edition Borland Software<br>&nbsp;&nbsp; ObjectDB for Java/JDO ObjectDB<br>&nbsp;&nbsp; Oracle Database 10g Oracle Corporation<br>&nbsp;&nbsp; Oracle Database Lite 10g Oracle Corporation<br>&nbsp;&nbsp; PointBase Embedded PointBase / DataMirror Corp.<br>&nbsp;&nbsp; Sybase Adaptive Server Enterprise (ASE) Sybase, Inc.<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;http://jdj.sys-con.com/general/readerschoice.htm<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;http://nuclearjava.blogchina.com/2006316.html <font color=#999999>(2005.06.26)</font></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</p>
</div>
<img src ="http://www.cppblog.com/true/aggbug/30415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-08-20 12:13 <a href="http://www.cppblog.com/true/archive/2007/08/20/30415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>92个经典开源项目集锦（包括URL）【转】</title><link>http://www.cppblog.com/true/archive/2007/08/17/30204.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Fri, 17 Aug 2007 01:47:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/08/17/30204.html</guid><wfw:comment>http://www.cppblog.com/true/comments/30204.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/08/17/30204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/30204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/30204.html</trackback:ping><description><![CDATA[<br><SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>
<div twffan="done">
<div twffan="done"><a href="http://blog.csdn.net/Azting/archive/2005/04/15/348368.aspx"><img height=13 src="http://blog.csdn.net/images/authorship.gif" width=15 border=0 twffan="done">&nbsp;92个经典开源项目集锦（包括URL）</a> </div>
<div twffan="done">
<p><span twffan="done"><font face="Times New Roman" size=3>Linux</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.linux.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>FreeBSD</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.freebsd.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>PostgreSQL</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.postgresql.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>MySQL</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.mysql.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>SAP DB</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.sapdb.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Hypersonic/Hsql</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://hsqldb.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>McKoi</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://mckoi.com/database/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Xindice</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://xml.apache.org/xindice/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>OJB</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://db.apache.org/ojb/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Hibernate</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.hibernate.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Castor</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://castor.exolab.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Torque</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://db.apache.org/torque/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JORM</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jorm.objectweb.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>XMLBeans</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://xml.apache.org/xmlbeans/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JiBX</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jibx.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Castor</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://castor.exolab.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JAXB Reference Implementation</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://java.sun.com/xml/jaxb/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JaxMe</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://ws.apache.org/jaxme/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Tomcat</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/tomcat/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Jetty</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jetty.mortbay.org/jetty/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JBoss</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.jboss.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Apache Geronimo</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://incubator.apache.org/projects/geronimo.html</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JOnAS</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jonas.objectweb.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>OpenEJB</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://openejb.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>OpenJMS</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://openjms.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JORAM</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://joram.objectweb.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JOTM</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jotm.objectweb.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Struts</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/struts/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Cocoon</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://cocoon.apache.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Turbine</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/turbine/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Velocity</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/velocity/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Tapestry</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/tapestry/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>WebWork</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://opensymphony.com/webwork/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Jetspeed</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/jetspeed/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Cocoon Portal</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://cocoon.apache.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Open For Business (OFBiz)</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.ofbiz.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Compiere</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.compiere.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>InfoSapient</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://info-sapient.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JPOS</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.jpos.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Mercator</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.globalretailtech.com/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Cofax</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.cofax.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>OpenCMS</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.opencms.org/opencms/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JasperReports</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jasperreports.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>DataVision</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://datavision.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JFreeReport</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.jfree.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JCharts</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jcharts.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>iText</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.lowagie.com/iText/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Apache FOP</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://xml.apache.org/fop/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>POI</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/poi/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Cron</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.linux.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JCronTab</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jcrontab.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Quartz</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.quartzscheduler.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Eclipse</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.eclipse.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>NetBeans</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.netbeans.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>SQuirreL</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://squirrel-sql.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>TORA</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.globecom.se/tora/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>DBVisualizer</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.minq.se/products/dbvis/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>TOAD</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.toadsoft.com/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>CVS</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.cvshome.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Subversion</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://subversion.tigris.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>CVSWeb</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.freebsd.org/projects/cvsweb.html</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>ViewCVS</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://viewcvs.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>DocBook</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.docbook.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>OpenOffice</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.openoffice.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Structured Text</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.zope.org/Documentation/Articles/STX</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>MoinMoin Wiki</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://moin.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>UseMod Wiki</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.usemod.com/cgi-bin/wiki.pl?UseModWiki</font></span></p>
<p><span twffan="done"><font size=3><font face="Times New Roman">Jabber
<p>&#160;</p>
</font></font></span>
<p>&#160;</p>
<p><span twffan="done"><font size=3><font face="Times New Roman">http://www.jabber.org/
<p>&#160;</p>
</font></font></span>
<p>&#160;</p>
<p><span twffan="done"><font size=3><font face="Times New Roman">Mailman
<p>&#160;</p>
</font></font></span>
<p>&#160;</p>
<p><span twffan="done"><font size=3><font face="Times New Roman">http://www.gnu.org/software/mailman/
<p>&#160;</p>
</font></font></span>
<p>&#160;</p>
<p><span twffan="done"><font face="Times New Roman" size=3>Eclipse Modeling Framework</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.eclipse.org/emf/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>ArgoUML</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://argouml.tigris.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Poseidon Community Edition</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.gentleware.com/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>XDoclet</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://xdoclet.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>MiddleGen</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://boss.bekk.no/boss/middlegen/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Jostraca</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.jostraca.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JUnit</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.junit.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Cactus</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/cactus/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JMeter</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jakarta.apache.org/jmeter/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Grinder</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://grinder.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Bugzilla</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://bugzilla.mozilla.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Scarab</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://scarab.tigris.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JIRA</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.atlassian.com/software/jira/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>ITracker</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.cowsultants.com/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>BeanShell</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.beanshell.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Jython</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.jython.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>JRuby</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://jruby.sourceforge.net/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Groovy</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://groovy.codehaus.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>AspectJ</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://eclipse.org/aspectj/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Ant</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://ant.apache.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>Maven</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://maven.apache.org/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>AntHill</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://www.urbancode.com/projects/anthill/</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>CruiseControl</font></span></p>
<p><span twffan="done"><font face="Times New Roman" size=3>http://cruisecontrol.sourceforge.net/</font></span></p>
<p><span twffan="done">
<p><font face="Times New Roman" size=3>&nbsp;</font></p>
</span>
<p>&#160;</p>
<br><br>
<p id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=348368</p>
</div>
</div>
<img src ="http://www.cppblog.com/true/aggbug/30204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-08-17 09:47 <a href="http://www.cppblog.com/true/archive/2007/08/17/30204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TinyXml总结</title><link>http://www.cppblog.com/true/archive/2007/04/05/21310.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 05 Apr 2007 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/04/05/21310.html</guid><wfw:comment>http://www.cppblog.com/true/comments/21310.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/04/05/21310.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/21310.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/21310.html</trackback:ping><description><![CDATA[<div class=postText twffan="done">
<p>一、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TinyXml的特点 </p>
<p>TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器。</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAX和DOM </p>
<p>目前XML的解析主要有两大模型：SAX和DOM。</p>
<p>其中SAX是基于事件的，其基本工作流程是分析XML文档，当发现了一个新的元素时，产生一个对应事件，并调用相应的用户处理函数。这种方式占用内存少，速度快，但用户程序相应得会比较复杂。</p>
<p>而DOM（文档对象模型），则是在分析时，一次性的将整个XML文档进行分析，并在内存中形成对应的树结构，同时，向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大，速度往往慢于SAX，但可以给用户提供一个面向对象的访问接口，对用户更为友好。</p>
<p>&nbsp;</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 验证和非验证 </p>
<p>对于一个特定的XML文档而言，其正确性分为两个层次。首先是其格式应该符合XML的基本格式要求，比如第一行要有声明，标签的嵌套层次必须前后一致等等，符合这些要求的文件，就是一个合格的XML文件，称作well-formatted。但除此之外，一个XML文档因其内容的不同还必须在语义上符合相应的标准，这些标准由相应的DTD文件或者Schema文件来定义，符合了这些定义要求的XML文件，称作valid。</p>
<p>因此，解析器也分为两种，一种是验证的，即会跟据XML文件中的声明，用相应的DTD文件对XML文件进行校验，检查它是否满足DTD文件的要求。另一种是忽略DTD文件，只要基本格式正确，就可以进行解析。</p>
<p>就我所知，验证的解析器通常都是比较重量级的。TinyXml不支持验证，但是体积很小，用在解析格式较为简单的XML文件，比如配置文件时，特别的合适。</p>
<p>&nbsp;</p>
<p>二、 TinyXml的构建和使用<br>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取 </p>
<p>TinyXml首页在http://www.grinninglizard.com/tinyxml/index.html，从这里可以找到最新版本的源代码，目前的版本是2.3.4。</p>
<p>2.构建 </p>
<p>TinyXml在构建时可以选择是否支持STL，选择的话，则可以使用std::string，所以通常应该打开这个选项。</p>
<p>在Windows上，TinyXml的源码包里提供了VC6的工程文件，直接用它就可以生成两个静态库（带STL和不带STL），非常容易。唯一需要注意的是，默认生成的库是单线程的，如果用在多线程的项目中，需要改动一下配置，生成相应的多线程库。</p>
<p>在Unix平台上，TinyXml的源码包里只提供了一个Makefile，对于典型的Linux系统，或装了gcc和gmake的其他Unix，这个Makefile足够用了，我在RH9和RHEL4上测试，简单的make就成功了。需要注意的有以下几点：默认的编译是不支持STL的，可以通过编辑Makefile的TINYXML_USE_STL := NO那一行，把NO改成YES就可以支持STL了；还有默认只生成了一个测试程序，没有生成任何库，如果要生成静态库的话，可以用ar命令，将生成的几个目标文件打包就行了，如果要生成动态库，则需要加上-fpic参数重新编译。</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用 </p>
<p>构建了相应的库之后，在使用了它们的工程中，只要在连接时把他们连上就行了。需要注意的是，如果需要STL支持，在编译用到了TinyXml的文件时，需要定义一个宏TIXML_USE_STL，对gcc，可以使用参数-DTIXML_USE_STL，对cl.exe（VC），可以使用参数/DTIXML_USE_STL，如果嫌麻烦，可以直接定义在 tinyxml.h文件里。</p>
<p>&nbsp;</p>
<p>三、 TinyXml的编程模型1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类之间的关系 </p>
<p>TinyXml实现的时DOM访问模型，因此提供了一系列的类对应XML文件中的各个节点。主要类间的关系如下图所示：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>TiXmlBase：其他类的基类，是个抽象类</p>
<p>TiXmlNode：表示一个节点，包含节点的一般方法，如访问自节点、兄弟节点、编辑自身、编辑子节电</p>
<p>TiXmlDocument：表示整个XML文档，不对应其中某个特定的节点。</p>
<p>TiXmlElement：表示元素节点，可以包含子节点和TiXmlAttribute</p>
<p>TiXmlComment：表示注释</p>
<p>TiXmlDeclaration：表示声明</p>
<p>TiXmlText：表示文本节点</p>
<p>TiXmlUnknown：表示未知节点，通常是出错了</p>
<p>TiXmlAttribute：表示一个元素的属性</p>
<p>下面是一个简单的例子：</p>
<p>&lt;?xml version="1.0" encoding="utf-8" ?&gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&lt;!-This is only a sample--&gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&lt;book&gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;TinyXml How To&lt;/name&gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;price unit=&#8221;RMB&#8221;&gt;20&lt;/price&gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;Some words&#8230;&lt;/description&gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&lt;/ book &gt; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>整个文档，对应TiXmlDocument</p>
<p>book,name,price, description，都对应TiXmlElement</p>
<p>第一行对应一个TiXmlDeclaration</p>
<p>第二行对应一个TiXmlComment</p>
<p>&#8220;TinyXml How To&#8221;对应一个TiXmlText</p>
<p>unit则是price的一个TiXmlAttribute</p>
<p>这些类与XML文件中的相应元素都有很好的对应关系，因此相信参照TinyXml的文档，可以很容易的掌握各个方法的使用。</p>
<p>&nbsp;</p>
<p>2.&nbsp;&nbsp;需要注意的问题 </p>
<p>各类之间的转换 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>由于各个节点类都从TiXmlNode继承，在使用时常常需要将TiXmlNode*类型的指针转换为其派生类的指针，在进行这种转换时，应该首先使用由TiXmlNode类提供的一系列转换函数，如ToElement(void)，而不是c++的dynamic_cast</p>
<p>&nbsp;</p>
<p>检查返回值 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>由于TinyXml是一个非校验的解析器，因此当解析一个文件时，很可能文件并不包含我们预期的某个节点，在这种情况下，TinyXml将返回空指针。因此，必须要对返回值进行检查，否则将很容易出现内存访问的错误。</p>
<p>&nbsp;</p>
<p>如何重头建立一个XML文件 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>先建立一个TiXmlDocument对象，然后，载入某个模板，或者直接插入一个节点作为根节点，接着就可以像打开一个已有的XML文件那样对它进行操作了。</p>
<p>&nbsp;</p>
<p>四、总结 </p>
<p>TinyXml最大的特点就是它很小，可以很方便的静态连接到程序里。对于像配置文件、简单的数据文件这类文件的解析，它很适合。但是由于它是非验证的，因此需要在程序里做许多检查工做，加重了程序编写的负担。因此对于复杂的XML文件，我觉得最好还是用验证的解析器来处理。<br>&nbsp;</p>
<br><br>
<p id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1006509</p>
<br></div>
<img src ="http://www.cppblog.com/true/aggbug/21310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-04-05 14:10 <a href="http://www.cppblog.com/true/archive/2007/04/05/21310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tinyxml 的使用，转</title><link>http://www.cppblog.com/true/archive/2007/04/04/21250.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Wed, 04 Apr 2007 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/04/04/21250.html</guid><wfw:comment>http://www.cppblog.com/true/comments/21250.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/04/04/21250.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/21250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/21250.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器， 用来读写配置文件是最好的，可从http://www.grinninglizard.com/tinyxml/index.html这里下载。构建TinyXML&nbsp;时可以选择是否支持STL， 一般建议选择支持STL。TinyXml的源码包里提供了VC6的工程文件，直接用它就可以生成静态库。然后把tinyxml.h， tinyst...&nbsp;&nbsp;<a href='http://www.cppblog.com/true/archive/2007/04/04/21250.html'>阅读全文</a><img src ="http://www.cppblog.com/true/aggbug/21250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-04-04 17:14 <a href="http://www.cppblog.com/true/archive/2007/04/04/21250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tinyxml 使用</title><link>http://www.cppblog.com/true/archive/2007/04/03/21148.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Tue, 03 Apr 2007 01:28:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/04/03/21148.html</guid><wfw:comment>http://www.cppblog.com/true/comments/21148.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/04/03/21148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/21148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/21148.html</trackback:ping><description><![CDATA[<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width="90%" border=0>
    <tbody>
        <tr>
            <td class=oblog_t_4><span class=style1 twffan="done"><font size=3>转贴-有关TinyXML使用的简单总结</font></span></td>
        </tr>
        <tr>
            <td>
            <table cellSpacing=0 cellPadding=0 width="100%" border=0>
                <tbody>
                    <tr>
                        <td>
                        <div align=right twffan="done"><span class=oblog_text twffan="done">floodking 发表于 2006-11-6 18:01:00</span></div>
                        </td>
                    </tr>
                </tbody>
            </table>
            <span class=oblog_text twffan="done"><br>&nbsp;这次使用了<span style="FONT-FAMILY: Tahoma" twffan="done">TinyXML</span>后，觉得这个东西真是不错，于是将使用方法坐下总结来和大家分享。<br>&nbsp;&nbsp;&nbsp;&nbsp;该解析库在开源网站（<a href="http://sourceforge.net/"><strong><span style="COLOR: red" twffan="done"><u>http://sourceforge.net</u></span></strong></a>&nbsp;）上有下载，在本Blog也提供下载（<a href="http://www.cnblogs.com/Files/freecoder/tinyxml_2_4_3.zip"><strong style="COLOR: red"><u>下载TinyXML</u></strong></a>）<br>&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: Tahoma" twffan="done">TinyXML</span>是一个开源的解析<span style="FONT-FAMILY: Tahoma" twffan="done">XML</span>的解析库，能够用于<span style="FONT-FAMILY: Tahoma" twffan="done">C++</span>，能够在<span style="FONT-FAMILY: Tahoma" twffan="done">Windows</span>或<span style="FONT-FAMILY: Tahoma" twffan="done">Linux</span>中编译。这个解析库的模型通过解析<span style="FONT-FAMILY: Tahoma" twffan="done">XML</span>文件，然后在内存中生成<span style="FONT-FAMILY: Tahoma" twffan="done">DOM</span>模型，从而让我们很方便的遍历这课<span style="FONT-FAMILY: Tahoma" twffan="done">XML</span>树。<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #00ccff" twffan="done"><strong>注：DOM模型即文档对象模型，是将整个文档分成多个元素（如书、章、节、段等），并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系（理解html语言的读者会很容易理解这种树状模型）。</strong></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;如下是一个XML片段：<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style="COLOR: #00ccff">&lt;Persons&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Person ID="1"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;周星星&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;age&gt;20&lt;/age&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Person&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Person ID="2"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;白晶晶&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;age&gt;18&lt;/age&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Person&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Persons&gt;<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;在TinyXML中，根据XML的各种元素来定义了一些类：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #00ccff" twffan="done">TiXmlBase</span>：整个TinyXML模型的基类。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: #00ccff" twffan="done">TiXmlAttribute</span>：对应于XML中的元素的属性。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #00ccff" twffan="done">&nbsp;TiXmlNode</span>：对应于DOM结构中的节点。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #00ccff" twffan="done">TiXmlComment</span>：对应于XML中的注释。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #00ccff" twffan="done">TiXmlDeclaration</span>：对应于XML中的申明部分，即&lt;？versiong="1.0"&nbsp;?&gt;。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #00ccff" twffan="done">TiXmlDocument</span>：对应于XML的整个文档。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #00ccff" twffan="done">TiXmlElement</span>：对应于XML的元素。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #00ccff" twffan="done">TiXmlText</span>：对应于XML的文字部分。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #00ccff" twffan="done">TiXmlUnknown</span>：对应于XML的未知部分。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #00ccff" twffan="done">TiXmlHandler</span>：定义了针对XML的一些操作。<br>&nbsp;&nbsp;&nbsp; 那我们如何使用这些类以及他们的方法来操纵我们的XML呢？请看下面。<br>&nbsp;&nbsp;&nbsp; <strong><span style="FONT-SIZE: 14pt" twffan="done"><em style="COLOR: #00ccff">一、读取XML(假设我们的Xml文档中的内容与上面的Xml内容一样)<br></em></span>&nbsp;&nbsp;&nbsp;<span style="COLOR: #3366ff" twffan="done"> //创建一个XML的文档对象</span><span style="COLOR: #3366ff" twffan="done">。</span><br>&nbsp;&nbsp;&nbsp; TiXmlDocument *myDocument = new TiXmlDocument("填上你的Xml文件名");<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #000000" twffan="done">myDocument-&gt;LoadFile();</span><br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//获得根元素，即Persons。</span><br>&nbsp;&nbsp;&nbsp; TiXmlElement *RootElement = myDocument.RootElement();<br>&nbsp;&nbsp;&nbsp;<span style="COLOR: #3366ff" twffan="done"> //输出根元素名称，即输出Persons。<br></span>&nbsp;&nbsp;&nbsp; cout &lt;&lt; RootElement-&gt;Value() &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//获得第一个Person节点。<br></span>&nbsp;&nbsp;&nbsp; TiXmlElement *FirstPerson = RootElement-&gt;FirstChildElement();<br>&nbsp;&nbsp;&nbsp;<span style="COLOR: #3366ff" twffan="done"> //获得第一个Person的name节点和age节点和ID属性。</span><br>&nbsp;&nbsp;&nbsp; TiXmlElement *NameElement = FirstPerson-&gt;FirstChildElement();<br>&nbsp;&nbsp;&nbsp; TiXmlElement *AgeElement = NameElement-&gt;NextSiblingElement();<br>&nbsp;&nbsp;&nbsp; TiXmlAttribute *IDAttribute = FirstPerson-&gt;FirstAttribute();<br>&nbsp;&nbsp;&nbsp;<span style="COLOR: #3366ff" twffan="done"> //输出第一个Person的name内容，即周星星；age内容，即20；ID属性，即1。<br></span>&nbsp;&nbsp;&nbsp; cout &lt;&lt; NameElement-&gt;FirstChild()-&gt;Value &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; AgeElement-&gt;FirstChild()-&gt;Value &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; IDAttribute-&gt;Value() &lt;&lt; endl;</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; 看，读取XML是不是很简单阿，和Java的XML解析库非常的相似，就是名字改了一下而已。<br>&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 14pt; COLOR: #00ccff" twffan="done"><em><strong>二、生成XML内容</strong></em></span><br>&nbsp;&nbsp;&nbsp;<span style="COLOR: #3366ff" twffan="done"> </span><strong><span style="COLOR: #3366ff" twffan="done">//创建一个XML的文档对象。<br></span>&nbsp;&nbsp;&nbsp; TiXmlDocument *myDocument = new TiXmlDocument();<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//创建一个根元素并连接。<br></span>&nbsp;&nbsp;&nbsp; TiXmlElement *RootElement = new TiXmlElement("Persons");<br>&nbsp;&nbsp;&nbsp; myDocument-&gt;LinkEndChild(RootElement);<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//创建一个Person元素并连接。<br></span>&nbsp;&nbsp;&nbsp; TiXmlElement *PersonElement = new TiXmlElement("Person");<br>&nbsp;&nbsp;&nbsp; RootElement-&gt;LinkEndChild(PersonElement);<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//设置Person元素的属性。<br></span>&nbsp;&nbsp;&nbsp; PersonElement-&gt;SetAttribute("ID", "1");<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//创建name元素、age元素并连接。</span><br>&nbsp;&nbsp;&nbsp; TiXmlElement *NameElement = new TiXmlElement("name");<br>&nbsp;&nbsp;&nbsp; TiXmlElement *AgeElement = new TiXmlElement("age");<br>&nbsp;&nbsp;&nbsp; PersonElement-&gt;LinkEndChild(NameElement);<br>&nbsp;&nbsp;&nbsp; PersonElement-&gt;LinkEndChild(AgeElement);<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #3366ff" twffan="done">//设置name元素和age元素的内容并连接。</span><br>&nbsp;&nbsp;&nbsp; TiXmlText *NameContent = new TiXmlText("周星星");<br>&nbsp;&nbsp;&nbsp; TiXmlText *AgeContent = new TiXmlText("20");<br>&nbsp;&nbsp;&nbsp; NameElement-&gt;LinkEndChild(NameContent);<br>&nbsp;&nbsp;&nbsp; AgeElement-&gt;LinkEndChild(AgeContent);<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #3366ff" twffan="done">//保存到文件</span><br>&nbsp;&nbsp;&nbsp;&nbsp;myDocument-&gt;SaveFile("要保存的xml文件名");<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;这样，便创建了一个如下的xml文件：<br>&nbsp;&nbsp;&nbsp; <strong style="COLOR: #00ccff">&lt;Persons&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Person ID="1"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;周星星&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;age&gt;20&lt;/age&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Person&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/Persons&gt;<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; 是不是很简单啊？在这里我只是简单的对TinyXml的使用作了介绍，欢迎各位提问留言，我会尽力解答各位的问题。[By Lqbest]<br></span></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/true/aggbug/21148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-04-03 09:28 <a href="http://www.cppblog.com/true/archive/2007/04/03/21148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Xerces C++ 学习笔记[转]</title><link>http://www.cppblog.com/true/archive/2007/03/15/19900.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 15 Mar 2007 07:54:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/03/15/19900.html</guid><wfw:comment>http://www.cppblog.com/true/comments/19900.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/03/15/19900.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/19900.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/19900.html</trackback:ping><description><![CDATA[
		<h4 class="TextColor1" id="subjcns!69b76268597b9606!137" style="MARGIN-BOTTOM: 0px">Xerces C++ 学习笔记</h4>
		<div id="msgcns!69b76268597b9606!137" twffan="done">
				<div twffan="done">
						<h1 align="center">
								<font size="6">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">Xerces C++ </font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">学习笔记</span>
										</font>
								</font>
						</h1>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">1．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">初始化平台：</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">XMLPlatformUtils::Initialze()</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">2．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">销毁平台：</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">XMLPlatformUtils::Terminate();</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">3．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">加载分析报文</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">XercesDOMParser<span twffan="done">  </span>*parser = new XercesDOMParser();</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">Parser-&gt;parse(</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">参数</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">);</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个参数可以直接是文件名，也可以是内存的数据，具体的查看</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">API</font>
												</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">4．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">数据格式转换</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">XMLString.transcode()</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个方法有多个重载，既可以把</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">XMLCh *</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">格式的数据转换成</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">char *</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">的数据，也可以把</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">char * </font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">的数据转换成</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">XMLCh *,</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">我们也可以利用这个函数来初始化</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">XMLCh </font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">格式类型的数组，比如</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">XMLCh temp[100];</font>
												</span>
										</font>
								</font>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done">                            </span>XMLString.transcode(“LS”,temp,99);//</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">用“</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">LS</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">”初始化</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">temp</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个数组的内容。</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">5．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">分析报文后，如何得到文档的树型结构</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">DOMDocument *xmlDoc = parser-&gt;getDocument();</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">6．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">得到树型结构后，如何得到第一个根节点</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">DOMElement *root = xmlDoc-&gt;getDocumentElement();</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">7．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">如何遍历文档的结构</font>
								</span>
						</p>
						<p>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">遍历一个树型的文档结构有三种方法。</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">1</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">．使用</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMNodeIterator</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">类</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">DOMNodeIterator *iterator = xmlDoc-&gt;createNodeIterator(root, DOMNodeFilter::SHOW_TEXT,<span twffan="done">  </span>NULL, true);</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">for ( DOMNode * current = (DOMNode *)iterator-&gt;nextNode(); current != 0; current = (DOMNode *)iterator-&gt;nextNode() )</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
										</span>
										<font face="Times New Roman" color="#000000" size="3">{</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">        </span>string strValue = XMLString::transcode(current-&gt;getNodeValue());</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">        </span>std::cout &lt;&lt;strValue&lt;&lt;endl;</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done"> </span>}//</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">以上就可以把</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">xml</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">文档中的属性为</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">NODETEXT</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">节点的内容给打印出来。</span>
										</font>
								</font>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">2</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">．使用</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMTreeWalker</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">类</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Tahoma" twffan="done">D</span>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">OMTreeWalker *walker =  xmlDoc-&gt;createTreeWalker(root, DOMNodeFilter::SHOW_TEXT, NULL, true);</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Tahoma" twffan="done">f</span>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">or (DOMNode *current = walker-&gt;nextNode(); current != 0; current = walker-&gt;nextNode() )   </font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done"> </span>{ </font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">      char *strValue = XMLString::transcode( current-&gt;getNodeValue() );     std::cout &lt;&lt;strValue;<br />            XMLString::release(&amp;strValue);   </font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">}</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">3</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">．使用子节点直接遍历树型结构</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">   </span>DOMNode *n = (DOMNode*)xmlDoc-&gt;getDocumentElement();</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
										</span>
										<font face="Times New Roman" color="#000000" size="3">//</font>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">下面开始遍历这个树的结构</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
										</span>
										<font face="Times New Roman" color="#000000" size="3">if(n)</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
										</span>
										<font face="Times New Roman" color="#000000" size="3">{</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">        </span>if (n-&gt;getNodeType() == DOMNode::ELEMENT_NODE)</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">        </span>{</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">               </span>
																<span twffan="done"> </span>DOMNodeList* nodeList = n-&gt;getChildNodes();</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">               </span>
																<span twffan="done"> </span>unsigned int nListLen = nodeList-&gt;getLength();</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">               </span>
																<span twffan="done"> </span>for (unsigned int i=0; i&lt;nListLen; ++i)</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">               </span>
																<span twffan="done"> </span>{</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                      </span>DOMNode* nodeTemp = nodeList-&gt;item(i);</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                      </span>if (nodeTemp-&gt;getNodeType() == DOMNode::ELEMENT_NODE)</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                      </span>{</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                             </span>for (DOMNode* node1=nodeTemp-&gt;getFirstChild(); node1!=0; node1=node1-&gt;getNextSibling())</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                             </span>{</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                                    </span>char* name = XMLString::transcode(node1-&gt;getNodeName());</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                                    </span>string strTemp = name;</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done">                                    </span>if (strTemp == "name")<span twffan="done">   </span>//</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个就是跟</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">xml</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">文档中</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">name</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">节点匹配</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                                    </span>{</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">        </span>char* myname=XMLString::transcode(node1-&gt;getFirstChild()-&gt;getNodeValue());</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                                           </span>cout&lt;&lt;myname&lt;&lt;endl;</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                                    </span>} </font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                             </span>}</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                      </span>}</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">                      </span>continue;</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">               </span>}</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="Times New Roman">
																<span twffan="done">        </span>}</font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
										</span>
										<font face="Times New Roman" color="#000000" size="3">}</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">8．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">如何添加子节点。</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font size="3">
												<font color="#000000">
														<font face="宋体">
																<span twffan="done">    </span>//Add new (empty) Element to the root element<br />     DOM_Element parentNode = …;// parent is known<br />     DOM_Element prodElem = doc-&gt;createElement (tagName);<br />     parentNode-&gt;appendChild (prodElem); </font>
												</font>
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">9．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</font>
										</span>
								</span>
								<font size="3">
										<font color="#000000">
												<span style="FONT-FAMILY: 宋体" twffan="done">在加载</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">xml</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">文件分析前，有两种加载方式：一种直接通过文件加载，一种是通过内存加载</span>
										</font>
								</font>
						</p>
						<p>
								<font face="Times New Roman">
										<span lang="EN-US" twffan="done">
												<span twffan="done">
														<font color="#000000">
																<font size="3">1．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span>
														</font>
												</span>
										</span>
										<span lang="EN-US" twffan="done">
												<font color="#000000" size="3">String xmlfile = “a.xml”;</font>
										</span>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">Parser-&gt;parse(xmlfile.c_str());</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done">        </span>2.MemBufInputSource  </font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个类处理内存的数据，然后利用</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">parser-&gt;parse(*men)//men</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">是</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">MemBufInputSource  </font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">的实例指针对象。</span>
										</font>
								</font>
						</p>
						<table cellspacing="0" cellpadding="0" border="0">
								<tbody>
										<tr>
												<td valign="top">
														<p align="right">
																<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体" twffan="done">
																</span> </p>
												</td>
										</tr>
								</tbody>
						</table>
						<p>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">
										</font>
								</span>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">10．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">              </span>
														</font>
												</font>
										</span>
								</span>
								<font size="3">
										<font color="#000000">
												<span style="FONT-FAMILY: 宋体" twffan="done">在加载分析报文前，可以设置</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">XercesDOMParser</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">的一些属性。</span>
										</font>
								</font>
						</p>
						<p>
								<font color="#000000">
										<span lang="EN-US" twffan="done">
												<span twffan="done">
														<font face="Times New Roman" size="3">        </font>
												</span>
										</span>
										<span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Tahoma" twffan="done">P</span>
								</font>
								<span lang="EN-US" twffan="done">
										<font face="Times New Roman" color="#000000" size="3">arser-&gt;setValidationScheme( XercesDOMParser::Val_Auto );<br />  <span twffan="done">    </span><span twffan="done">    </span>Parser-&gt;setDoNamespaces( false );<br />    <span twffan="done">     </span>Parser-&gt;setDoSchema( false );<br />    <span twffan="done">     </span>Parser-&gt;setLoadExternalDTD( false );</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done">        </span>//</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个部分的代码可以参照类库自带的例子。</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">11．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">              </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">我们也可以设置错误的处理代码。</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<span twffan="done">
																<font face="Times New Roman">        </font>
														</span>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这部分可以查看类库下的</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMPrint</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">例子。</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMError ,DOMErrorHandler</font>
												</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">12．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">              </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">也可以设置分析过滤的属性</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done">         </span>DOMNodeFilter<span twffan="done">  </span></font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">这个类能起到这个效果</span>
										</font>
								</font>
						</p>
						<p>
								<span lang="EN-US" twffan="done">
										<span twffan="done">
												<font face="Times New Roman">
														<font color="#000000">
																<font size="3">13．</font>
																<span style="FONT: 7pt 'Times New Roman'" twffan="done">              </span>
														</font>
												</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 宋体" twffan="done">
										<font color="#000000" size="3">要美化文档的格式化输出，我们可以使用</font>
								</span>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">
																<span twffan="done">        </span>XMLFormatter<span twffan="done">    </span>XMLFormatTarget<span twffan="done">  </span>,</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">用的时候可以查看。</span>
										</font>
								</font>
						</p>
						<p>
								<font size="3">
										<font color="#000000">
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">14<span twffan="done">      </span></font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">我们也可以通过</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMImplementationLs , DOMImplementation </font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">前者是后者的基类。通过这个类我们可以创建</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMBuilder</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">（</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">parser</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">）或</span>
												<span lang="EN-US" twffan="done">
														<font face="Times New Roman">DOMWriter</font>
												</span>
												<span style="FONT-FAMILY: 宋体" twffan="done">（序列，既可以写到屏幕，也可以写到文件）</span>
										</font>
								</font>
						</p>
				</div>
		</div>
<img src ="http://www.cppblog.com/true/aggbug/19900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-03-15 15:54 <a href="http://www.cppblog.com/true/archive/2007/03/15/19900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>