文章目錄
1 簡介
工作中經常使用mxml進行數據傳輸,所以需要構造或者解析mxml數據,因爲做個簡單記錄,方便使用。
關於mxml的介紹,這裏就不再說明,百度就會得到一大堆詳細介紹。
解析和構造部分依賴於minixml,不用自己造輪子了。
2下載及編譯
2.1 mxml庫的下載地址:
https://www.msweet.org/mxml/index.html
2.2 編譯
在PC上編譯,直接使用GCC工具鏈,可以使用下面的指令:
./configure && make
交叉編譯使用下面的指令:
./configure --host=arm-hisiv100nptl-linux
2.3 生成庫
在編譯完成後,會生成如下庫:
libmxml.a libmxml.so libmxml.so.1 libmxml.so.1.6
我們在自己的程序需要添加mxml頭文件,以及在編譯程序中鏈接上面的庫。
3 重要函數簡介
3.1 mxmlNewXML
函數原型:
extern mxml_node_t *mxmlNewXML(const char *version);
函數參數:
version:默認傳入字符”1.0”
函數返回:
返回新創建的xml文件節點
說明:
當新創建xml文件時,需要先調用此函數。
3.2 mxmlNewElement
函數原型:
extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name);
函數參數:
parent:父節點名稱
name: 新創建的子節點名稱
函數返回:
返回新創建的子節點名稱
說明:
當爲某一個節點創建一個子節點時候,調用此函數
3.3 mxmlNewText
函數原型:
extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace, const char *string);
函數參數:
parent: 節點
whitespace: 設置爲0,即文本前空格數爲0
string: 文本內容
函數返回:
忽略
說明:
爲某個節點創建文本內容
3.4 mxmlSaveString
函數原型:
extern int mxmlSaveString(mxml_node_t *node, char *buffer,
int bufsize, mxml_save_cb_t cb);
函數參數:
node:被保存的xml節點的根節點,一般是mxmlNewXML創建的根節點
buff:要保存的buff指針
bufsize:buff的大小
cb: 默認使用MXML_NO_CALLBACK
函數返回:
函數執行情況
說明:
保存創建的節點數據
3.5 mxmlDelete
函數原型:
extern void mxmlDelete(mxml_node_t *node);
函數參數:
node:要刪除的節點,一般是mxmlNewXML創建的根節點
函數返回:
無
說明:
此函數刪除節點,即釋放此節點指向的所有節點申請的內存,一般在創建完xml文件,並保存完之後,調用此函數釋放節點
3.6 mxmlLoadString
函數原型:
extern mxml_node_t *mxmlLoadString(mxml_node_t *top, const char *s,
mxml_type_t (*cb)(mxml_node_t *));
函數參數:
top:要加載的節點的父節點,如果是直接從內存buff中獲取,可以直接置爲NULL
s:內存buff
cb:默認使用MXML_NO_CALLBACK
函數返回:
xml的父節點
說明:
從內存buff中加載xml,並進行分析獲取父節點
3.7 mxmlFindElement
函數原型:
extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,
const char *element, const char *attr,
const char *value, int descend);
函數參數:
node:被查找的節點
top: 頂層節點
element:要查找的節點的字段
attr:要查找節點的屬性,可爲NULL
value:要查找節點的屬性的值,可爲NULL
descend:模式,主要有三個參數,
#define MXML_DESCEND 1 /* Descend when finding/walking */
#define MXML_NO_DESCEND 0 /* Don't descend when finding/walking */
#define MXML_DESCEND_FIRST -1 /* Descend for first find */
函數返回:
子節點
說明:
從node節點中查找字段爲element的子節點
3.8 mxmlGetText
函數原型:
extern const char *mxmlGetText(mxml_node_t *node, int *whitespace);
函數參數:
node:要獲取的節點
whitespace:0,沒有空格
函數返回:
獲取的數據指針
說明:
此函數用於獲取指定節點的文本內容