libxml2的使用总结
libxml是一个实现了读,创建和操作xml数据等功能的c语言库,对于其具体的API,可参考官方文档,这里只介绍一些常用的用法。
libxml在操作xml数据时,定义了几种节点类型:
#include <libxml/parser.h>#include <libxml/xpath.h>xmlDocPtr getdoc (char *docname) {xmlDocPtr doc;doc = xmlParseFile(docname);if (doc == NULL ) {fprintf(stderr,"Document not parsed successfully. \n");return NULL;}return doc;}xmlXPathObjectPtr getnodeset (xmlDocPtr doc, xmlChar *xpath){xmlXPathContextPtr context;xmlXPathObjectPtr result;context = xmlXPathNewContext(doc);if (context == NULL) {printf("Error in xmlXPathNewContext\n");return NULL;}result = xmlXPathEvalExpression(xpath, context);xmlXPathFreeContext(context);if (result == NULL) {printf("Error in xmlXPathEvalExpression\n");return NULL;}if(xmlXPathNodeSetIsEmpty(result->nodesetval)){xmlXPathFreeObject(result);printf("No result\n");return NULL;}return result;}int main(int argc, char **argv) {char *docname;xmlDocPtr doc;xmlChar *xpath = (xmlChar*) "//root";xmlNodeSetPtr nodeset;xmlXPathObjectPtr result;int i;xmlChar *keyword;if (argc <= 1) {printf("Usage: %s docname\n", argv[0]);return(0);}docname = argv[1];doc = getdoc(docname);result = getnodeset (doc, xpath);if (result) {nodeset = result->nodesetval;for (i=0; i < nodeset->nodeNr; i++) {keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode,1);printf("keyword1: %s\n", keyword);xmlFree(keyword);}xmlXPathFreeObject (result);}xmlFreeDoc(doc);xmlCleanupParser();return (1);}