c语言 libxml库函数,使用libxml2库处理xml数据

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

目录

libxml2.so库安装

程序效果

关键代码

参考资料

libxml2.so库安装

22cacd874a88d9e51cb68c063828389c.png

截图1.CentOS安装libxml2

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

程序效果

1.读取xml文件

1375888f3310deccd2f7b141d334a8e6.png

截图2.xml文件内容

f7e0bc9e0fb7017096c096fac4e80b38.png

截图3.读取并打印

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

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

2.创建xml文件

d5000ac63dbdf0b3310328b87402b66c.png

​截图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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值