C语言直接处理xml数据是很麻烦的,使用xmllib2.so库函数,能方便的解析、生成xml数据。
libxml2.so库安装
程序效果
关键代码
参考资料
截图1.CentOS安装libxml2
执行命令“yum install libxml2”即可。
1.读取xml文件
截图2.xml文件内容
截图3.读取并打印
读取部分逻辑稍微复杂一点,有2层xml节点,需要循环读取。
Tips:编译时gcc参数需要包含xmllib2的头文件及库,具体路径需要查看安装xmllib2之后在哪里。
2.创建xml文件
截图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