嵌入式linux開發:[1]XML解析?

我打算把我這些年記錄的比較給寫下來,慢慢來寫,都是寫經驗。

方法/步驟

1.1.1 協議概述

採用網路上開源的Cmarkup類來解析XML協議,因為Cmarkup使用起來方便、簡單。Cmarkup具備了所有對XML的操作,只要呼叫所提供的方法就可以了。最新版下載網站:

1.1.1 XML描述

XML 文件形成一種樹結構XML 文件必須包含根元素。該元素是所有其他元素的父元素。

XML 文件中的元素形成了一棵文件樹。這棵樹從根部開始,並擴充套件到樹的最底端。

上圖表示下面的 XML 中的一本書:

Everyday Italian

Giada DeLaurentiis

2005

30.00

Harry Potter

J K.Rowling

2005

29.99

Learning XML

Erik T.Ray

2003

39.95

嵌入式linux開發:[1]XML解析

1.1.1 XML語法

推薦學習網站

一個合格xml的語法要求

1)文件的開始必須是XML宣告。

2)含有資料的元素必須有起始標記和結束標記。

即: xxx

3)不含資料並且僅使用一個標記的元素必須以/>結束。

即:

也可以使用 ,但是不推薦.

不可以使用

4)文件只能包含一個能夠包含全部其他元素的元素。

即:合格的XML文件必須有且只有一個根元素

5)元素只能巢狀不能重疊。

eg:不合法的巢狀例子:Thistext is bold and italic

6)屬性值必須加引號。

eg: value要用雙引號括起來

7)字元 <和&只能用於起始標記和實體引用。< p>

8)xml對大小寫敏感

1.1.1 函式參考

下面是CMarkup的類成員函式列表。這些函式的設計都是基於源EDOM的。

1)初始化

Load 從一個(xml)檔案構建CMarkup物件並對其進行解析。

SetDoc 從一個字串構建CMarkup物件並對其進行解析。 xml.SetDoc("xml version=\"1.0\"encoding=\"UTF-8\"?>\r\n");

2)輸出

Save 把xml文件資料寫到檔案中。

GetDoc 將整個xml文件資料作為一個字串返回。

3)改變當前位置

FindElem 定位到下一個元素,可以選擇匹配標籤名或者路徑。

FindChildElem 定位到下一個子元素,可以選擇匹配標籤名或者路徑。

FindNode 定位到下一個節點,可選擇匹配節點型別。

IntoElem 進入當前位置的下一級位置,而當前位置則變為父位置。

OutOfElem 使當前位置的父位置變為當前位置。

ResetPos 復位當前位置為文件的起始位置,到XML第一行的位置,需要使用FindChildElem函式後才可以使用其他函式,暫時測試如此。

ResetMainPos 復位當前位置為第一個兄弟位置之前。

ResetChilePos 復位當前的子位置為第一個子位置之前。

4)新增元素

AddElem 在當前位置元素或者最後一個兄弟之後新增一個元素。

InsertElem 在當前位置元素或者第一個兄弟之前插入一個元素。

AddChildElem 在當前子位置元素或者最後一個子位置之後增加一個元素。

InsertChildElem 在當前子位置元素或者第一個子位置之前插入一個元素。

InsertNode 在當前節點的前面或者父元素內容的開頭新增一個節點。

譯註:注意區分元素和節點,元素只是一種特殊的節點而已。

5)刪除元素

RemoveElem 刪除當前位置元素,包括子元素。

RemoveChildElem 刪除當前位置的子元素,包括子元素的子元素。

RemoveNode 刪除當前節點。

6)獲取資料

GetData 返回當前位置元素或者節點的字串值。

GetChildData 返回當前子位置元素的字串值。

GetElemContent 返回當前位置包括子位置的markup字串內容

GetSubDoc 返回當前位置包括子位置的子文件markup字串內容

7)設定值,修改資料

SetData 設定當前位置元素或者節點的值

SetChildData 設定當前子位置元素的值

SetElemContent 將當前位置元素用markup(標記)內容來替換

SetAttrib 設定當前位置元素的指定屬性的值

SetChildAttrib 設定當前子位置元素的指定屬性的值

GetTagName 獲得當前位置的標籤的名

8)部分函式不解

例1、FindChildElem(“ITEM”)

132487A-J

crank casing

1

xml.FindChildElem("ITEM")

xml.FindChildElem("SN");

CString csSN = xml.GetChildData();

如上並不能獲得SN的值,必須增加xml.IntoElem();xml.FindChildElem("SN");所以FindChildElem並沒有進入到 依然處於 的位置。該函式並不改變當前位置,可以使用GetTagName來獲取當前的位置。該函式如果返回空就表示不存在該元素。

9)常用函式

1.CString轉char *

windows strslave = xml.GetChildData(); cout << "sssss "<

linux 下轉換函式CString. c_str();

位置, 小米, 元素, 嵌入式,
相關問題答案