记一次项目经历——linux环境下使用libxml2实现xml文件的生成与解析

来源:互联网 发布:c语言循环经典编程题 编辑:程序博客网 时间:2024/05/16 07:49

Linux环境下配置libxml2的方法,网络上有很多,这里就不赘述了。


这里简单的记录下XML文档的生成与解析。


生成一个三级XML文档:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <libxml/parser.h>#include <libxml/tree.h>int main(){//定义文档指针xmlDocPtr pdoc = NULL;//定义节点指针xmlNodePtr node_root = NULL;xmlNodePtr node_father = NULL;xmlNodePtr node_son = NULL;//创建新的XML文档pdoc = xmlNewDoc(BAD_CAST "1.0");//创建节点元素node_root = xmlNewNode(NULL,BAD_CAST "root");node_father = xmlNewNode(NULL,BAD_CAST "father");node_son = xmlNewNode(NULL,BAD_CAST "son");//设置文档根节点xmlDocSetRootElement(pdoc,node_root);//添加子节点xmlAddChild(node_root,node_father);xmlAddChild(node_father,node_son);//设置节点属性xmlNewProp(node_father,BAD_CAST "name",BAD_CAST "Father");xmlNewProp(node_son,BAD_CAST "name",BAD_CAST "Son");//存储文档xmlSaveFormatFileEnc("xml_test.xml",pdoc,"UTF-8",1);//释放文档指针xmlFreeDoc(pdoc);//清理由XML库分配的内存xmlCleanupParser();//清理分配给.memorylist文件的内存块xmlMemoryDump();return 0;}
结果如图:


解析该文档:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <libxml/parser.h>#include <libxml/tree.h>//临时字符串变量xmlChar *key;//实现对son节点的解析int parse_son(xmlDocPtr doc,xmlNodePtr cur){//因为接受上一级传送的cur指针,这里需要指向子节点cur = cur->xmlChildrenNode;//遍历指针while(cur!=NULL){//匹配相关字符串if((!xmlStrcmp(cur->name,BAD_CAST "son"))){//获取相关字符串属性key = xmlGetProp(cur,"name");printf("%s\n",key);xmlFree(key);}cur=cur->next;}}//实现对father节点的解析int parse_father(xmlDocPtr doc,xmlNodePtr cur){cur = cur->xmlChildrenNode;while(cur!=NULL){if((!xmlStrcmp(cur->name,BAD_CAST "father"))){key = xmlGetProp(cur,"name");printf("%s\n",key);xmlFree(key);}parse_son(doc,cur);cur=cur->next;}}int main(){//定义解析文档指针xmlDocPtr doc = NULL;   //定义结点指针(你需要它为了在各个结点间移动)xmlNodePtr cur = NULL;  //解析文件 doc = xmlReadFile("xml_test.xml","UTF-8",XML_PARSE_RECOVER);  //确定文档根元素cur = xmlDocGetRootElement(doc);  parse_father(doc,cur);//释放文件指针xmlFreeDoc(doc); return 0;}
成功解析:




0 0
原创粉丝点击