整個解析器包含在乙個檔案中----rapidxml.hpp 不需要額外的編譯連線,只需將其放在project中在程式中include進去。rapidxml_print.hpp包含了一些輸出函式。
rapidxml:
xml_base 是 xml_node 和xml_attribute的基類 -----子類繼承了: ch 類似char
ch* name() const;返回標籤/屬性的名字,如果沒有便返回空串 「 "" 」
std::size_t name_size() const;----返回名字的位元組數 不含結束符
ch* value() const; 返回標籤/屬性的值,如果沒有返回空串
std::size_t name_size() const
xml_node* parent() const;指向父節點的指標,如果沒用則返回0
xml_base 中的方法:
xml_attribute
近來找到乙個快速的xml庫,試用了一下,方法和現在使用的tinyxml差不多,很容易上手,如果有機會可以移植到專案裡面試試
自從用了xml後對他是又愛又恨,他的確能代替配置檔案,但是當檔案容量大到一定量的時候災難就降臨了,比如讀取乙個50m的xml檔案,往往讀取花上10秒,解析再花上20秒,還要占用大量記憶體空間,十分頭痛.所以實際專案中都會將xml再轉為二進位制檔案來處理,但是xml的靈活性的確很方便,如果rapidxml能接近二進位制的速度,當然就太好啦,還沒有測試過,下面是一些介紹.
貌似tinyxml會遇到unicode障礙,rapidxml不會,如果專案要做多語言版本就必須面臨解決這個問題...
rapidxml是乙個快速的xml庫,官方**: 根據manual看到,他竟然比tinyxml快了50-100倍
目前我公司開發的nexus engine的底層物件序列化使用了tinyxml來讀寫xml檔案。tinyxml有兩個不爽的地方,一是它的介面使用file*,另外乙個是它對 wchar_t不能很好的支援。前陣子看boost庫的更新中多了乙個propertytree,他在處理xml時用到了另外乙個小的庫 –rapidxml。既然間接的是boost庫的一部分,所以是值得一試的。於是找到其官方**(
首先就是速度,據它自己宣稱比tinyxml快30到60倍,比xerces dom快50到100倍!詳細的測試比較請見其使用者手冊(manual.html
)的「4. performance 」一節。
其次它的設計非常的簡潔,只依賴於標準庫中的幾個基本的類。它的輸入輸出都是字串,這樣很好,乙個庫就應該關注自己核心的內容,做盡量少的事情。它的api其實和tinyxml倒是有幾分相似,用過tinyxml的人應該很容易上手:
tinyxml主要介面類 rapidxml的主要介面類
tinyxml主要介面類rapidxml的主要介面類
class tixmldocument
template
class xml_document
class tixmlnode
template
class xml_node
class tixmlattribute
template
class xml_attribute
下面還是看乙個具體的例子來體驗一下,下面是tinyxml官方教程中建立xml文件的一段**:
void build_******_doc( )下面是使用rapidxml實現類似功能的**:
string text;
rapidxml::print(std::back_inserter(text), doc, 0);
// write text to file by yourself}
下面是使用rapidxml分析xml的樣例**:
void parse_doc_by_rapidxml(char* xml_doc)前兩天有朋友問,我的slimxml有沒有和rapidxml對比過效率?我是第一次聽說這個庫,更不用說對比效率了,於是上他們**看了下。
好傢伙,居然號稱比tinyxml快30~60倍,而且是boost.propertytree的預設xml解析器。
於是有點好奇,因為以前也沒有特別關心過slimxml的效率。
測試物件是三個庫從記憶體字串解析xml的函式,這樣能排除從硬碟上讀檔案這種不穩定因素的干擾,而且rapidxml貌似只支援從記憶體裡解析
要說明的是,rapidxml的這個parse是乙個模板函式,必須給乙個flag的引數,我測試的時候給的是預設的0
測試結果,解析這個3.3萬行,1.5m大小的xml,三個庫分別花了
比較欣慰的是,在我並沒有很關注效率的情況下,slimxml仍然比tinyxml快2.5倍。slimxml走的是簡單小巧路線,源**只有32k,而tinyxml和rapidxml的原始碼分別是147k和141k,有這樣的效率可以滿意了。在我有很多空閒以前,估計我也不會再去優化它,因為這個庫主要還是針對幾十上百行的小檔案,解析特別大的xml不在我考慮的範圍之內。
CVS使用手冊
注意 第一次匯出以後,就不是通過cvs checkout來同步檔案了,而是要進入剛才cvs checkout project name匯出的project name目錄下進行具體檔案的版本同步 新增,修改,刪除 操作。cvs的許可權管理分2種策略 基於系統檔案許可權的系統使用者管理 適合多個在lin...
sed使用手冊
原貼 http blog.chinaunix.net u 23204 showart 305602.html sed使用手冊 原創 在sed語句,正規表示式必須封閉在 中間。如 d,刪除空行。sed位址 在sed位址管理中,預設是對全域性進行操作,同時位址可以分為行位址和模式位址。如1,10d 12...
vi 使用手冊
進入vi的命令 vi filename 開啟或新建檔案,並將游標置於第一行首 vi n filename 開啟檔案,並將游標置於第n行首 vi filename 開啟檔案,並將游標置於最後一行首 vi pattern filename 開啟檔案,並將游標置於第乙個與pattern匹配的串處 vi r...