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;
}

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