minimxml使用_創建及分析xml

文章目錄


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章