前面簡單介紹了一些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;
}