rapidxml 使用手冊1

2021-06-04 23:25:13 字數 2525 閱讀 8745

整個解析器包含在乙個檔案中----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...