XML解析库的制作及使用

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-gccj进行编译,交叉工具链可以使用 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值