Mini-XML库资料【中文教程】
是一个小型的开源的XML解析器,采用 C 语言开发。该解析器最大的特点就是小型、无须依赖其他类库
下载地址
-
官方网址:http://www.minixml.org/
-
git 地址:https://github.com/michaelrsweet/mxml.git
Mini-XML有很多版本,这里采用的是当前的最新版 Mini-XML Version 3.2 进行编译。
编译Mini-XML库
不同版本的库要使用不同的交叉编译工具链,会有少许区别。
PC版本
- 将下载的源码包 minixml.tar.gz 解压到Ubuntu中。
tar -zxvf minixml.tar.gz
cd mxml-3,2
- 配置源代码
默认的安装路径是 /usr/local/
,如果没有root权限,我们可以自定义安装路径。使用./configure --prefix = 自己的路径
,这里可以使用下面的命令对源代码进行配置。路径需要根据自己的实际情况进行修改。
./configure --prefix=/home/tianjh/mini-xml/mxml-master/mxml-pc
- 编译源代码
make
- 安装Mini-XML库
Mini-XXL库会被安装到我们指定的目录,默认在/usr/local/
。
make install
ARM版本
Mini-XML
编译配置时,我们可以指定编译的工具链。在PC版本的配置过程中,使用的是Ubuntu自带的gcc工具链。在ARM开发板上应使用与板载SOC相匹配的工具链。这里是用的AM335x,使用arm-linux-gnueabihf-gcc
j进行编译,交叉工具链可以使用 CC
指定。
配置过程如下:
./configure --prefix=/home/tianjh/mini-xml/mxml-master/mxml-arm --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc
其余的过程与PC版本相同
make
make install
编译结果
在我们配置的安装目录下的./lib/
可以找到我们编译生成的 Mini-XML库。可以看到这四个文件。这就是我们所需的库文件。
libmxml.a // 静态链接库
libmxml.so // libmxml.so.1.6 的符号链接
libmxml.s0.1 // libmxml.so.1.6 的符号链接
libmxml.so.1.6 // 动态链接库
简单使用
一个小例子(生成XML文档)
先移植我们事先编译好的库以及相应的头文件,将其存放在同一文件夹下,文件结构如下:
blogDemo
|---minixml
| |----libmxml.a
| |----libmxml.so
| |----libmxml.so.1
| |----libmxml.so.1.16
|----main.c
|----Makefile
|----build.sh
- main.c
/******************************************************************************
* File: main.c
*
* Author: Seaworth
* Created: 03/06/20
* Description: 生成filename.xml文件
*****************************************************************************/
#include <stdio.h>
#include <mxml.h>
int main(int argc, char *argv[])
{
mxml_node_t *xml; /* <?xml ... ?> */
mxml_node_t *data; /* <data> */
mxml_node_t *node; /* <node> */
mxml_node_t *group; /* <group> */
FILE *fp;
fp = fopen("filename.xml", "w");
xml = mxmlNewXML("1.0");
data = mxmlNewElement(xml, "data");
node = mxmlNewElement(data, "node");
mxmlNewText(node, 0, "val1");
node = mxmlNewElement(data, "node");
mxmlNewText(node, 0, "val2");
node = mxmlNewElement(data, "node");
mxmlNewText(node, 0, "val3");
group = mxmlNewElement(data, "group");
node = mxmlNewElement(group, "node");
mxmlNewText(node, 0, "val4");
node = mxmlNewElement(group, "node");
mxmlNewText(node, 0, "val5");
node = mxmlNewElement(group, "node");
mxmlNewText(node, 0, "val6");
node = mxmlNewElement(data, "node");
mxmlNewText(node, 0, "val7");
node = mxmlNewElement(data, "node");
mxmlNewText(node, 0, "val8");
mxmlSaveFile(xml, fp, MXML_NO_CALLBACK);
mxmlDelete(xml); // 删除
return 0;
}
- Makefile
这里注意的是 -L后跟上我们动态链接库的路径,这里的路径为./minixml/
,注意最前面有一个.
。
all:
g++ main.c -o main.o -lmxml -L./minixml/
clean:
rm *.o
- build.sh
动态链接库在运行时要指定库的路径,可以使用LD_LIBRARY_PATH
环境变量来指明。
make clean
make
export LD_LIBRARY_PATH=/home/tianjh/mini-xml/testdemo/demoblog/minixml
./main.o
当然也可以将生成的动态库拷贝到系统库路径下,就可以直接运行了,系统库路径一般在/usr/lib/
目录下。
- 生成XML文件
执行./build.sh
命令后,就可以在当前路径下看到filename.xml
文件了,文件内容是:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<node>val1</node>
<node>val2</node>
<node>val3</node>
-<group>
<node>val4</node>
<node>val5</node>
<node>val6</node>
</group>
<node>val7</node>
<node>val8</node>
</data>
更多的用法
其他的更详细的用法参见 Mini-XML 文档
中文:https://blog.csdn.net/bluesonic/article/details/3887143
英文:https://www.msweet.org/mxml/mxml.html