前面简单介绍了一些mini mxml常用函数,下面将使用这些函数创建以及分析一个xml文件
1 创建
我们假如要创建一个xml文件,如下:
<?xml version="1.0" encoding="utf-8"?>
<TEST>
<num>1</num>
<people>
<name>zhangsan</name>
<age>23</age>
<job>staff</job>
</people>
</TEST>
代码如下:
#include <stdio.h>
#include "mxml.h"
int xml_build()
{
int s32Ret = 0;
char s8Buff[2018] = {0};
mxml_node_t *pHead,*pBody,*pPeople,*pNode;
/* 创建xml文件 */
pHead = mxmlNewXML("1.0");
/* 创建节点TEST */
pBody = mxmlNewElement(pHead, "TEST");
/* 在TEST节点下创建子节点num */
pNode = mxmlNewElement(pBody, "num");
mxmlNewText(pNode, 0, "1"); //num节点创建文本内容
/* 在TEST节点下创建子节点people */
pPeople = mxmlNewElement(pBody, "people");
/* 在people节点下创建子节点name */
pNode = mxmlNewElement(pPeople, "name");
mxmlNewText(pNode, 0, "zhangsan");//name节点创建文本内容
/* 在people节点下创建子节点age */
pNode = mxmlNewElement(pPeople, "age");
mxmlNewText(pNode, 0, "23");//age节点创建文本内容
/* 在people节点下创建子节点job */
pNode = mxmlNewElement(pPeople, "job");
mxmlNewText(pNode, 0, "staff");//job节点创建文本内容
/* 保存生成的xml数据 */
mxmlSaveString(pHead, s8Buff, sizeof(s8Buff), MXML_NO_CALLBACK);
/* 删除节点,释放内存 */
mxmlDelete(pHead);
printf("buff is:%s\n",s8Buff);
return s32Ret;
}
2 解析
同样,如果我们要分析一段xml,代码如下:
#include <stdio.h>
#include "mxml.h"
#define TEST_BUF "<?xml version=\"1.0\" encoding=\"utf-8\"?>" \
"<TEST>" \
"<num>1</num>" \
"<people>" \
"<name>zhangsan</name>" \
"<age>23</age>" \
"<job>staff</job>" \
"</people>" \
"</TEST>"
int xml_parase()
{
int s32Ret = -1;
int s32PeopleNum = 0;
char s8PeopleName[32] = {0};
int s32PeopleAge = 0;
char s8PeopleJob[32] = {0};
mxml_node_t *pHead,*pBody,*pPeople,*pNode;
/* 加载 */
pHead = mxmlLoadString(NULL, TEST_BUF, MXML_NO_CALLBACK);
/* 查找字段为TEST的节点 */
if((pBody = mxmlFindElement(pHead, pHead, "TEST", NULL, NULL, MXML_DESCEND)) == NULL)
{
goto ERROR;
}
/* 查找TEST节点的子节点num */
if((pNode = mxmlFindElement(pBody, pHead, "num", NULL, NULL, MXML_DESCEND)) == NULL)
{
goto ERROR;
}
if (mxmlGetText(pNode, 0) == NULL) //获取num的文本内容
{
goto ERROR;
}
else
{
s32PeopleNum = atoi(mxmlGetText(pNode, 0));
}
/* 查找TEST节点的子节点people */
if((pPeople = mxmlFindElement(pBody, pHead, "people", NULL, NULL, MXML_DESCEND)) == NULL)
{
goto ERROR;
}
/* 查找people节点的子节点name */
if((pNode = mxmlFindElement(pPeople, pHead, "name", NULL, NULL, MXML_DESCEND)) == NULL)
{
goto ERROR;
}
if (mxmlGetText(pNode, 0) == NULL)//获取name的文本内容
{
goto ERROR;
}
else
{
strcpy(s8PeopleName,mxmlGetText(pNode, 0));
}
/* 查找people节点的子节点job */
if((pNode = mxmlFindElement(pPeople, pHead, "job", NULL, NULL, MXML_DESCEND)) == NULL)
{
goto ERROR;
}
if (mxmlGetText(pNode, 0) == NULL)//获取job的文本内容
{
goto ERROR;
}
else
{
strcpy(s8PeopleJob,mxmlGetText(pNode, 0));
}
/* 查找people节点的子节点age */
if((pNode = mxmlFindElement(pPeople, pHead, "age", NULL, NULL, MXML_DESCEND)) == NULL)
{
goto ERROR;
}
if (mxmlGetText(pNode, 0) == NULL)//获取age的文本内容
{
goto ERROR;
}
else
{
s32PeopleAge = atoi(mxmlGetText(pNode, 0));
}
printf("--->PeopleNum:%d,PeopleName:%s,PeopleAge:%d,PeopleJob:%s\n",s32PeopleNum,s8PeopleName,s32PeopleAge,s8PeopleJob);
s32Ret = 0;
ERROR:
mxmlDelete(pHead);
return s32Ret;
}