文章目录
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,没有空格
函数返回:
获取的数据指针
说明:
此函数用于获取指定节点的文本内容