C XML解析之TinyXML篇

2021-06-20 15:00:19 字數 3264 閱讀 2535

8.7

出處:2345軟體大全

人氣:4922

英語口語紅寶書2.1

愛主題1.6

c/c++程式設計學習與實驗系統2013.3

codelite ide for c/c++v3.5.5377

c/c++程式設計學習與實驗系統v2011.2 綠色版

dev c++ 5v4.9.9.2

最近使用tinyxml進行c++ xml解析,感覺使用起來比較簡單,很容易上手,本文給出乙個使用tinyxml進行xml解析的簡單例子,很多複雜的應用都可以基於本例子的方法來完成。以後的文章裡會講解使用xerces進行c++ xml解析的例子,希望大家一起交流。

tinyxml是乙個開源的解析xml的解析庫,能夠用於c++,能夠在windows或linux中編譯。這個解析庫的模型通過解析xml檔案,然後在記憶體中生成dom模型,從而讓我們很方便的遍歷這棵xml樹。

dom模型即文件物件模型,是將整個文件分成多個元素(如書、章、節、段等),並利用樹型結構表示這些元素之間的順序關係以及巢狀包含關係。

在附加包含路徑裡新增:你的tinyxpath路徑/tinyxpath/include

在附加庫路徑裡新增:你的tinyxpath路徑/tinyxpath/lib

在物件/庫路徑裡新增:tinyxpathd.lib,如果使用release版本,則是tinyxpath.lib。

另外,由於我開發的專案是多執行緒的,所以設定了多執行緒的環境,因此使用tinyxml沒有出現問題。本人將tinyxml寫在乙個單獨的c++工程進行測試,發現如果不設定多執行緒的環境,會出現鏈結錯誤。我覺得原因可能是tinyxml使用了多執行緒環境,因此需要設定多執行緒的環境。在工程/設定下的c/c++選項卡中,選擇code generation,在use run-time library中選擇debug multithreaed dll即可。

本例的xml檔案students.xml如下:

88208888

西安市太白南路二號

88206666

西安市光華路

程式**xmlparseexample.cpp如下所示:

#include

#include

#include

using std::string;

int main()

tixmldocument* mydocument = new tixmldocument();

mydocument->loadfile("students.xml");

tixmlelement* rootelement = mydocument->rootelement(); //class

tixmlelement* studentselement = rootelement->firstchildelement(); //students

tixmlelement* studentelement = studentselement->firstchildelement(); //students

while ( studentelement ) {

tixmlattribute* attributeofstudent = studentelement->firstattribute(); //獲得student的name屬性

while ( attributeofstudent ) {

std::cout 《 attributeofstudent->name() 《 " : " 《 attributeofstudent->value() 《 std::endl;

attributeofstudent = attributeofstudent->next();

tixmlelement* phoneelement = studentelement->firstchildelement();//獲得student的phone元素

std::cout 《 "phone" 《 " : " 《 phoneelement->gettext() 《 std::endl;

tixmlelement* addresselement = phoneelement->nextsiblingelement();

std::cout 《 "address" 《 " : " 《 phoneelement->gettext() 《 std::endl;

studentelement = studentelement->nextsiblingelement();

return 0;

程式執行結果如下:

name : 張三

studentno : 13031001

*** : 男

age : 22

phone : 88208888

address : 88208888

name : 李四

studentno : 13031002

*** : 男

age : 20

phone : 88206666

address : 88206666

本例中使用的是對xml檔案進行解析,很容易掌握,但是很多開發人員不知道如何對xml 字元流(非xml檔案)進行解析,我看了tinyxml提供的源**,裡面可以使用如下方法對xml流解析。對應於上例,**如下:

string xmlstring =

"88208888

西安市太白南路二號

88206666

西安市光華路

";tixmldocument* mydocument = new tixmldocument();

mydocument->parse(xmlstring.c_str());

使用parse函式就可以解析xml字元流了,這是很多開發者不太熟悉的情況。

下面介紹tinyxml的一些類。在tinyxml中,根據xml的各種元素來定義了一些類:

tixmlbase:整個tinyxml模型的基類。

tixmlattribute:對應於xml中的元素的屬性。

tixmlnode:對應於dom結構中的節點。

tixmlcomment:對應於xml中的注釋

tixmldeclaration:對應於xml中的申明部分,<?versiong="1.0" ?>。

tixmldocument:對應於xml的整個文件。

tixmlelement:對應於xml的元素。

tixmltext:對應於xml的文字部分

tixmlunknown:對應於xml的未知部分。

tixmlhandler:定義了針對xml的一些操作。

C XML解析之TinyXML篇

我要提問 我來說兩句 最近使用tinyxml進行c xml解析,感覺使用起來比較簡單,很容易上手,本文給出乙個使用tinyxml進行xml解析的簡單例子,很多複雜的應用都可以基於本例子的方法來完成。以後的文章裡會講解使用xerces進行c xml解析的例子,希望大家一起交流。tinyxml是乙個開源...

C XML解析之TinyXML篇

最近使用tinyxml進行c xml解析,感覺使用起來比較簡單,很容易上手,本文給出乙個使用tinyxml進行xml解析的簡單例子,很多複雜的應用都可以基於本例子的方法來完成。以後的文章裡會講解使用xerces進行c xml解析的例子,希望大家一起交流。tinyxml是乙個開源的解析xml的解析庫,...

C XML解析方式例項解析

c xml解析通過xpath的方式是如何辦到的呢?具體的操作步驟是什麼呢?那麼下面我們就向你介紹通過xpath的方式來實現c xml解析,希望對你了解c xml解析有所幫助。c xml解析通過xpath的方式的步驟 1 需要先載入文件,然後再讀取想要的節點值。xml文件 protected xmld...