﻿<?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++博客-to myself 的分类学习日志-随笔分类-third</title><link>http://www.cppblog.com/toMyself/category/15752.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 15 Mar 2011 06:01:28 GMT</lastBuildDate><pubDate>Tue, 15 Mar 2011 06:01:28 GMT</pubDate><ttl>60</ttl><item><title>xercesc</title><link>http://www.cppblog.com/toMyself/archive/2011/03/06/141235.html</link><dc:creator>iven</dc:creator><author>iven</author><pubDate>Sun, 06 Mar 2011 14:15:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2011/03/06/141235.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">myfile.xml
<br>&lt;level1&gt;<br>&nbsp;&nbsp;&nbsp; &lt;level2&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;abc&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/level2&gt;<br>&nbsp;&nbsp;&nbsp; &lt;level2&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;xyz&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/level2&gt;
<br>&lt;/level1&gt;
<br><br><br><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">util</span><span style="color: #000000;">/</span><span style="color: #000000;">PlatformUtils.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">framework</span><span style="color: #000000;">/</span><span style="color: #000000;">XMLFormatter.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">util</span><span style="color: #000000;">/</span><span style="color: #000000;">XMLString.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">util</span><span style="color: #000000;">/</span><span style="color: #000000;">XMLUniDefs.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">framework</span><span style="color: #000000;">/</span><span style="color: #000000;">MemBufInputSource.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">framework</span><span style="color: #000000;">/</span><span style="color: #000000;">LocalFileInputSource.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">parsers</span><span style="color: #000000;">/</span><span style="color: #000000;">XercesDOMParser.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">dom</span><span style="color: #000000;">/</span><span style="color: #000000;">DOMNode.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">xercesc</span><span style="color: #000000;">/</span><span style="color: #000000;">dom</span><span style="color: #000000;">/</span><span style="color: #000000;">DOMNodeList.hpp</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#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>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">vector</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#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><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;XERCES_CPP_NAMESPACE;<br></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><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;initialise&nbsp;xerces&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLPlatformUtils::Initialize&nbsp;();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;XMLException&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;toCatch)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pMsg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;XMLString::transcode&nbsp;(toCatch.getMessage&nbsp;());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">Error&nbsp;during&nbsp;Xerces-c&nbsp;Initialization.\n</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;Exception&nbsp;message:&nbsp;%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;pMsg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pMsg;<br>&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;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;parse&nbsp;a&nbsp;XML&nbsp;file&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;XercesDOMParser&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">m_DOMParser&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;XercesDOMParser();<br>&nbsp;&nbsp;&nbsp;&nbsp;m_DOMParser</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">setValidationScheme(XercesDOMParser::Val_Always);<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;ErrorHandler&nbsp;*m_ERRHandler&nbsp;=&nbsp;(ErrorHandler*)new&nbsp;HandlerBase();<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;m_DOMParser-&gt;setErrorHandler(m_ERRHandler);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_DOMParser</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">parse(</span><span style="color: #000000;">"</span><span style="color: #000000;">myfile.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;XMLException</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;toCatch)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&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;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;XMLCh&nbsp;temp[</span><span style="color: #000000;">257</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;DOMNode&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">root&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_DOMParser</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getDocument();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;取得了整个树的根节点</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;DOMNodeList</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;childList&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;root</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getChildNodes();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获取所有子节点</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;childList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getLength();&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLString::transcode(</span><span style="color: #000000;">"</span><span style="color: #000000;">level1</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;temp,&nbsp;</span><span style="color: #000000;">256</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;内部使用UTF-16编码，所以需要转换</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(childList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(j)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeType()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;DOMNode::ELEMENT_NODE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;XMLString::compareString(childList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(j)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeName(),&nbsp;temp)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">tn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;XMLString::transcode(childList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(j)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;tn&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMNode&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">subRoot&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;childList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMNodeList&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">subChildList&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;subRoot</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getChildNodes();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;k&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;subChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getLength();&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">k)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLString::transcode(</span><span style="color: #000000;">"</span><span style="color: #000000;">level2</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;temp,&nbsp;</span><span style="color: #000000;">256</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;内部使用UTF-16编码，所以需要转换</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(subChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(k)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeType()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;DOMNode::ELEMENT_NODE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;XMLString::compareString(subChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(k)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeName(),&nbsp;temp)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">tn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;XMLString::transcode(subChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(k)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\t</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;tn&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMNode&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ssubRoot&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;subChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(k);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMNodeList&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ssubChildList&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ssubRoot</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getChildNodes();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;m&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;ssubChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getLength();&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">m)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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;XMLString::transcode(</span><span style="color: #000000;">"</span><span style="color: #000000;">name</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;temp,&nbsp;</span><span style="color: #000000;">256</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;内部使用UTF-16编码，所以需要转换</span><span style="color: #008000;"><br></span><span style="color: #000000;"><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><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ssubChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(m)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeType()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;DOMNode::ELEMENT_NODE<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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;XMLString::compareString(ssubChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(m)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeName(),&nbsp;temp)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<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;{<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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">tn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;XMLString::transcode(ssubChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(m)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeName());<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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">tv&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;XMLString::transcode(ssubChildList</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">item(m)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getFirstChild()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getNodeValue());</span><span style="color: #008000;">//</span><span style="color: #008000;">每个ELEMENT的第一子节点为TEXT_NODE</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\t\t</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;tn&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;tv&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;tv=="abc",</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLString::release(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">tn);<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;&nbsp;&nbsp;&nbsp;&nbsp;XMLString::release(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">tv);<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;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;XMLPlatformUtils::Terminate();<br><br>&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>}</span></div>
<br><br>g++ -g -O2 -msse2 -o DOMPrint src/DOMPrint/DOMPrint.o src/DOMPrint/DOMPrintErrorHandler.o src/DOMPrint/DOMPrintFilter.o src/DOMPrint/DOMTreeErrorReporter.o ../src/.libs/libxerces-c.so -lnsl -lpthread<br><br><br>参考：<br>1，http://panpan.blog.51cto.com/489034/187272<br>2，http://blog.csdn.net/wangpeng110m/archive/2009/05/14/4181668.aspx<br><br><br>遇到的错误：<br>1，xml文件本身有问题，结束标签忘记写&#8220;/&#8220;。<br>
<br><br>  <img src ="http://www.cppblog.com/toMyself/aggbug/141235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">iven</a> 2011-03-06 22:15 <a href="http://www.cppblog.com/toMyself/archive/2011/03/06/141235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4cpp</title><link>http://www.cppblog.com/toMyself/archive/2010/12/21/137147.html</link><dc:creator>iven</dc:creator><author>iven</author><pubDate>Tue, 21 Dec 2010 15:40:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/12/21/137147.html</guid><description><![CDATA[<p>bug: <br>problem: <a href="http://bugs.gentoo.org/217755">http://bugs.gentoo.org/217755</a><br>solution: <a href="http://bugs.gentoo.org/attachment.cgi?id=149763&amp;action=view">http://bugs.gentoo.org/attachment.cgi?id=149763&amp;action=view</a><br><br><br>5 包含头文件<br>日志记录<br>#include &lt;log4cpp/Category.hh&gt;<br>日志配置读取<br>#include &lt;log4cpp/PropertyConfigurator.hh&gt;<br>NDC<br>#include &lt;log4cpp/NDC.hh&gt;<br><br>9 日志代码<br>每个类可以有自己的类别(log4cpp::Category)，<br>可以在配置文件中添加该类别并设置日志级别。<br>所有的log4cpp::Category都使用同一个Appender<br>不同的Category配置为不同的日志级别，就可以控制日志输出的范围。<br>一般只使用四个记录日志级：DEBUG，INFO，WARN，ERROR<br>如：<br>log4cpp::Category::getRoot().info("Now run line %d", __LINE__);<br>或使用非根类别<br>log4cpp::Category::getInstance("MyCat").info("Now run line %d", __LINE__);<br><br>使用流：<br>log4cpp::Category::getInstance("main_cat").infoStream()<br>&nbsp;&nbsp;&nbsp; &lt;&lt; "This will show up as "<br>&nbsp;&nbsp;&nbsp; &lt;&lt; 1 &lt;&lt; " emergency message"<br>&nbsp;&nbsp;&nbsp; &lt;&lt; log4cpp::CategoryStream::ENDLINE;<br>&nbsp; &nbsp;<br>具体的函数说明见api文档.<br><br>7 读取配置代码<br>读取log配置文件，应在log4cpp静态成员初始化之后。<br>如在CXXXApp::InitInstance()中<br><br>&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4cpp::PropertyConfigurator::configure("log.ini");<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch (log4cpp::ConfigureFailure e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4cpp::Category::getRoot().warn(e.what());<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; <br><br>8 配置文件<br><br>[log4cpp]<br># Set root category priority to DEBUG and its only appender to A1. <br># priority enum: "FATAL", "ALERT", "CRIT", "ERROR", "WARN",<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "NOTICE", "INFO", "DEBUG", "NOTSET", "UNKNOWN"<br>rootCategory=DEBUG,A1<br>additivity.rootCategory=false<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br># define appender<br>appender.A1=RollingFileAppender<br>#appender.A1.threshold=NOTSET<br>appender.A1.fileName=XXXX.log<br>#appender.A1.maxFileSize=10485760<br>#appender.A1.maxBackupIndex=1<br>appender.A1.layout=PatternLayout<br>appender.A1.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S}](%p)%c %x: %m%n<br><br>appender.Info_Cons=ConsoleAppender<br>appender.Info_Cons.threshold=INFO<br>appender.Info_Cons.layout=PatternLayout<br>appender.Info_Cons.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S}](%p)%c %x: %m%n<br><br># category for sub1<br>category.sub1=DEBUG,A1,Info_Cons<br>additivity.sub1=false<br>category.sub2=INFO,A1<br>additivity.sub1=false<br><br># other categories<br><br>[others]<br>djkf=dksajf<br><br><br><br><br>参考：<br>1， http://www.ibm.com/developerworks/cn/linux/l-log4cpp/index.html<br>2， http://www.usidcbbs.com/simple/?t1514.html<br>3， http://hi.baidu.com/pc_room/blog/item/5db43bfa46e8a415a8d31194.html<br>4， 重写日志库的感悟： http://blog.csdn.net/zlei12/archive/2007/02/08/1505663.aspx<br>5， http://blog.csdn.net/blueseason/archive/2010/07/27/5769389.aspx<br><br><br><br><br><br>#if defined(_LOG4CPP) &amp;&amp; defined(WIN32)<br>#&nbsp;&nbsp;&nbsp;&nbsp; define MakePrefix&nbsp;&nbsp;&nbsp; std::string(__FUNCTION__).append("() - ")<br>#&nbsp;&nbsp;&nbsp; define LogDebug&nbsp;&nbsp;&nbsp;&nbsp; (LogDebuger(log, MakePrefix))<br>#&nbsp;&nbsp;&nbsp; define LogInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LogInfoer(log, MakePrefix))<br>#&nbsp;&nbsp;&nbsp; define LogNotice&nbsp;&nbsp;&nbsp;&nbsp; (LogNoticer(log, MakePrefix))<br>#&nbsp;&nbsp;&nbsp; define LogError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LogErrorer(log, MakePrefix))<br>#elif defined(_LOG4CPP) &amp;&amp; !defined(WIN32)<br>#&nbsp;&nbsp;&nbsp; define MakePrefix(fmt)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::string(__FILE__).append("::").append(__FUNCTION__).append("() - ").append(fmt).c_str()<br>#&nbsp;&nbsp;&nbsp; define LogDebug(fmt, ...)&nbsp;&nbsp;&nbsp; log.debug(MakePrefix(fmt), ##__VA_ARGS__)<br>#&nbsp;&nbsp;&nbsp; define LogInfo(fmt, ...)&nbsp;&nbsp;&nbsp; log.info(MakePrefix(fmt), ##__VA_ARGS__)<br>#&nbsp;&nbsp;&nbsp; define LogNotice(fmt, ...)&nbsp;&nbsp;&nbsp; log.notice(MakePrefix(fmt), ##__VA_ARGS__)<br>#&nbsp;&nbsp;&nbsp; define LogError(fmt, ...)&nbsp;&nbsp;&nbsp; log.error(MakePrefix(fmt), ##__VA_ARGS__)<br>#else<br>#&nbsp;&nbsp;&nbsp; define LogDebug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suck<br>#&nbsp;&nbsp;&nbsp; define LogInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suck<br>#&nbsp;&nbsp;&nbsp; define LogNotice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suck<br>#&nbsp;&nbsp;&nbsp; define LogError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suck<br>#endif<br><br>参考： http://blog.csdn.net/simbi/archive/2009/11/20/4840582.aspx<br><br><br><br><br><br>/*#define MAKE_PREFIX(fmt)&nbsp; std::string(__FILE__).append("&nbsp; ").append(__FUNCTION__).append(fmt).c_str()*/<br><br>#define MAKE_PREFIX(fmt) std::string("%s line %d:").append(fmt).c_str(),__FILE__ ,__LINE__<br>#define LOG_DEBUG(fmt,...) Logger::file_log.debug(MAKE_PREFIX(fmt),##__VA_ARGS__)<br>#define LOG_ERROR(fmt,...) Logger::file_log.error(MAKE_PREFIX(fmt),##__VA_ARGS__)<br>#define LOG_INFO(fmt,...)&nbsp; Logger::file_log.info(MAKE_PREFIX(fmt),##__VA_ARGS__)<br>#define LOG_NOTICE(fmt,...) Logger::file_log.notice(MAKE_PREFIX(fmt), ##__VA_ARGS__)<br><br>参考： http://blog.csdn.net/blueseason/archive/2010/07/27/5769389.aspx<br><br><br>&nbsp;<br><br><br>方案一：<br>int my_printf(const char* format, ...)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; va_list arg;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int done;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; va_start(arg, format);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done = vprintf(format, arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; va_end(arg);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return done;<br>}</p>
<p><br>方案二：<br>// file: global.h<br>#ifndef CLOBAL_H<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define GLOBAL_H<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int funca(void);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int funcb(void);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define DEBUGFMT&nbsp; "%s(%d)-%s"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define DEBUGARGS __FILE__,__LINE__,__FUNCTION__<br>#endif</p>
<p><br>#include "global.h"<br>int funca(void)<br>{<br>printf (DEBUGFMT " this is function\n",DEBUGARGS);<br>return 0;<br>}</p>
<p><br>方案三：<br>#ifndef DBG_PRINTF(_x_) <br>#ifdef DEBUG <br>&nbsp;#define DBG_PRINTF(_x_) \<br>&nbsp;&nbsp;do { \<br>&nbsp;&nbsp;&nbsp;printf("%s(%d)--:",__FILE__,__LINE__); \<br>&nbsp;&nbsp;&nbsp;printf&nbsp; _x_; \<br>&nbsp;&nbsp;} while(0); <br>#else<br>&nbsp;#define DBG_PRINTF(_x_) <br>#endif <br>#endif </p>
<p><br>方案四：<br>#ifndef DBG_PRINTF <br>#ifdef DEBUG <br>&nbsp;#define DBG_PRINTF \<br>&nbsp;&nbsp;&nbsp;printf("%s(%d)--:",__FILE__,__LINE__); \<br>&nbsp;&nbsp;&nbsp;printf <br>#else<br>&nbsp;#define DBG_PRINTF <br>#endif <br>#endif <br><br><br>方案五：<br>#define my_printf(file, line, ARGS... ) \<br>&nbsp; do {&nbsp; printf("%s(%d)--:", file, line); \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(ARGS); } while(0)</p>
<p>#define DEG_PRINTF(...) my_printf(__FILE__, __LINE__, ##__VA_ARGS__);</p>
<p>参考： <a href="http://www.upsdn.net/html/2006-08/692.html">http://www.upsdn.net/html/2006-08/692.html</a><br><br>&nbsp;<br>方案六：<br>&nbsp;void (*publish)(PublishLoc *, RLogChannel *, const char *format, ... )<br>&nbsp;&nbsp;&nbsp;&nbsp; PRINTF_FP(3,4);<br>&nbsp;RLogNode *pub;<br>&nbsp;const char *component;<br>&nbsp;const char *fileName;<br>&nbsp;const char *functionName;<br>&nbsp;int lineNum;<br>&nbsp;RLogChannel *channel;<br>&nbsp;&nbsp;&nbsp; };</p>
<p>#define _rMessageDef(ID, COMPONENT) \<br>&nbsp; static rlog::PublishLoc ID ={&amp;rlog::RLog_Register, 0, STR(COMPONENT), \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __FILE__, __FUNCTION__, __LINE__, 0};</p>
<p><br>#if HAVE_PRINTF_FP || !HAVE_PRINTF_ATTR<br>#&nbsp; define _rMessageCall(ID, CHANNEL, ARGS...) \<br>&nbsp; if(unlikely(ID.publish!=0)) (*ID.publish)( &amp;ID, CHANNEL, ##ARGS );<br>#else<br># define _rMessageCall(ID, CHANNEL, ARGS...) \<br>&nbsp; if(unlikely(ID.publish!=0))&nbsp; \<br>&nbsp; { \<br>&nbsp;&nbsp;&nbsp; (*ID.publish)( &amp;ID, CHANNEL, ##ARGS ); \<br>&nbsp;&nbsp;&nbsp; rlog::__checkArgs( 0, ##ARGS ); \<br>&nbsp; }<br>#endif</p>
<p>&nbsp;</p>
<p>#define _rMessage(ID, CHANNEL, ARGS... ) \<br>&nbsp; do { _rMessageDef(ID, RLOG_COMPONENT) \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _rMessageCall(ID, CHANNEL, ##ARGS ) } while(0)</p>
<p><br>#define rDebug(ARGS...) \<br>&nbsp; _rMessage( LOGID, rlog::_RLDebugChannel, ##ARGS )</p>
<p>#define rInfo(ARGS...) \<br>&nbsp; _rMessage( LOGID, rlog::_RLInfoChannel, ##ARGS )</p>
<p>#define rWarning(ARGS...) \<br>&nbsp; _rMessage( LOGID, rlog::_RLWarningChannel, ##ARGS )</p>
<p>#define rError(ARGS...) \<br>&nbsp; _rMessage( LOGID, rlog::_RLErrorChannel, ##ARGS )</p>
<p>#define rLog(channel, ARGS...) \<br>&nbsp; _rMessage( LOGID, channel, ##ARGS )<br></p><img src ="http://www.cppblog.com/toMyself/aggbug/137147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">iven</a> 2010-12-21 23:40 <a href="http://www.cppblog.com/toMyself/archive/2010/12/21/137147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>