使用libxml2库处理xml数据

C语言直接处理xml数据是很麻烦的,使用xmllib2.so库函数,能方便的解析、生成xml数据。

目录

  • libxml2.so库安装

  • 程序效果

  • 关键代码

  • 参考资料

libxml2.so库安装

截图1.CentOS安装libxml2 

        执行命令“yum install libxml2”即可。

程序效果

1.读取xml文件 

使用libxml2库处理xml数据_第1张图片

截图2.xml文件内容 

使用libxml2库处理xml数据_第2张图片

截图3.读取并打印 

        读取部分逻辑稍微复杂一点,有2层xml节点,需要循环读取。

        Tips:编译时gcc参数需要包含xmllib2的头文件及库,具体路径需要查看安装xmllib2之后在哪里​。

2.创建xml文件 

使用libxml2库处理xml数据_第3张图片

​截图4.生成的xml文件

        只创建1层的xml节点。

关键代码

1.解析xml节点内容:

int parse_phone(xmlDocPtr doc, xmlNodePtr cur)
{
    assert(doc || cur);
    xmlChar *key;

    cur = cur->xmlChildrenNode;
    while (cur != NULL)
    {
        //读取name节点
        if (!xmlStrcmp(cur->name, (const xmlChar *)"name"))
        {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            printf("name:%s\t", key);
            xmlFree(key);
        }
        //读取tel节点
        if (!xmlStrcmp(cur->name, (const xmlChar *)"tel"))
        {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            printf("tel:%s\t", key);
            xmlFree(key);
        }
        //读取address节点
        if (!xmlStrcmp(cur->name, (const xmlChar *)"address"))
        {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            printf("address:%s\t", key);
            xmlFree(key);
        }
        printf("\n");

        cur = cur->next;
    }

    return 0;
}

2.创建xml数据:

int create_phone_book()
{
    xmlDocPtr doc = NULL;
    xmlNodePtr phone_books=NULL;

    //创建xml文档
    doc = xmlNewDoc(BAD_CAST "1.0");

    //添加xml节点并设定为根节点
    phone_books = xmlNewNode(NULL, BAD_CAST "phone_books");
    xmlDocSetRootElement(doc, phone_books);

    //根节点下创建3个子节点
    xmlNewTextChild(phone_books, NULL, BAD_CAST "name", BAD_CAST "Tom");
    xmlNewTextChild(phone_books, NULL, BAD_CAST "tel", BAD_CAST "102918267437");
    xmlNewTextChild(phone_books, NULL, BAD_CAST "address", BAD_CAST "New York");

    //保存文件
    xmlSaveFormatFileEnc(XML_OUTPUT_FILE, doc, "UTF-8", 1);

    //释放资源
    xmlFree(phone_books);
    xmlFreeDoc(doc);
    xmlCleanupParser();
    xmlMemoryDump();

    return 0;	
}

参考资料

1.libxml2的安装及使用

https://blog.csdn.net/zhangna20151015/article/details/51332550

你可能感兴趣的:(练习集)