1、在https://github.com/michaelrsweet/mxml/releases 下载mxml-2.11.tar.gz
2、创建一个文件夹mxml,用来编存放和编译mxml-2.11
# cd mxml
# tar -xzvf mxml-2.11.tar.gz
3、编译mxml库
解压编译
./configure --host=arm-hisiv300-linux
修改生产了Makefile文件
将
OBJS = mmd.o mxmldoc.o testmxml.o zipc.o $(LIBOBJS)
修改为:
OBJS = mmd.o $(LIBOBJS)
在all: $(TARGETS) 行后增加如下内容:
$(AR) -r libmxml.a $(OBJS)
make编译,生成libmxml.a文件
3、mini-xml使用;
(1)编译使用mini-xml库自带的testmxml.c
gcc -o testmxml testmxml.c -lmxml -lpthread
(2)编写自定义测试程序mymxml_test.c
gcc -o mymxml_test.c -lmxml -lpthread
编译完生成以下几个重要的文件
mxml.h 头文件
libmxml.a 静态链接库文件
libmxml.so 动态链接库的链接文件,链接到libmxml.so.1.4
libmxml.so.1 动态链接库的链接文件,链接到libmxml.so.1.4
libmxml.so.1.4 动态链接库本体
4、创建一个test文件夹,存放info.xml及编写的测试代码
# cd ..
# mkdir test
# cd test
info.xml信息如下:
-
"1.0"xml version=
-
<node>
-
<music>
-
<state stat= "China">
-
<url>http: //www.baidu.com</url>
-
</state>
-
</music>
-
<search>
-
<state stat= "China">
-
<url>http: //www.baidu.com</url>
-
</state>
-
<state stat= "USA">
-
<url>http: //www.google.com</url>
-
</state>
-
</search>
-
</node>
test.c编写如下:
-
-
-
-
-
-
int main(int argc,char **argv)
-
{
-
int i;
-
FILE *fp;
-
mxml_node_t *tree,*node,*search;
-
mxml_node_t *state,*url;
-
-
fp = fopen( "info.xml", "r");
-
if(fp == NULL)
-
{
-
printf( "open the info.xml error!\n");
-
return -1;
-
}
-
tree = mxmlLoadFile( NULL, fp,MXML_TEXT_CALLBACK);
-
fclose(fp);
-
if(tree == NULL)
-
{
-
printf( "Load file error!\n");
-
return -1;
-
}
-
-
node = mxmlFindElement(tree, tree, "node", NULL, NULL,MXML_DESCEND);
-
if(node == NULL)
-
{
-
printf( "can not find element node!\n");
-
return -1;
-
}
-
-
search = mxmlFindElement(node, tree, "search", NULL, NULL,MXML_DESCEND);
-
if(search == NULL)
-
{
-
printf( "can not find element search!\n");
-
return -1;
-
}
-
-
for(state = mxmlFindElement(search, tree, "state", "stat", NULL,MXML_DESCEND);
-
state != NULL;
-
state = mxmlFindElement(state, tree, "state", "stat", NULL,MXML_DESCEND))
-
{
-
for(i= 0;i<state->value.element.num_attrs;i++)
-
{
-
if( memcmp(state->value.element.attrs[i].name, "stat", strlen( "stat")) == 0)
-
{
-
printf( "value:%s\n",state->value.element.attrs[i].value);
-
url = mxmlFindElement(state, tree, "url", NULL, NULL,MXML_DESCEND);
-
printf( "url:%s\n",mxmlGetText(url, NULL));
-
}
-
}
-
}
-
-
mxmlDelete(tree);
-
printf( "success!\n");
-
-
return 0;
-
}
5、编译我们写的测试代码 (mxml-2.11目录与test目录在同一级目录下)
# arm-linux-gcc test.c -o test -static -I ../mxml-2.11 -L ../mxml-2.11 -lmxml -lpthread
其中-lpthread是必选参数,因为libmxml库用到了pthread库在编译时,编译器会优先选择动态链接库编译,这样编译出的文件会小很多。但是同时也需要目标板上有动态链接库支持。如果想静态编译,在编译参数中加上-static
6、拷贝生成的test执行文件到arm开发板中
7、运行测试
# ./test
测试结果如下:
value:China
url:http://www.baidu.com
value:USA
url:http://www.google.com
success!