这里的例子都是根据以后libxml2的官网上的
官网地址如下:
Libxml Tutorial
这一个例子,实现了,从xml当中获取关键字的内容,关键字,对应着xml<>外面的内容,如下所示:
上面举个例子:
<?xml version="1.0"?><story> <storyinfo> <author>John Fleck</author> <datewritten>June 2, 2002</datewritten> <keyword>example keyword</keyword> </storyinfo> <body> <headline>This is the headline</headline> <para>This is the body text.</para> </body></story>
目标:获取name为“keyword”,所对应的值,或者说是字符串:“example keyword”
具体代码实现如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <libxml/xmlmemory.h> 5 #include <libxml/parser.h> 6 7 void 8 parseStory (xmlDocPtr doc, xmlNodePtr cur) { 9 10 xmlChar *key; 11 cur = cur->xmlChildrenNode; 12 while (cur != NULL) { 13 if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) { 14 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); 15 printf("keyword: %s\n", key); 16 xmlFree(key); 17 } 18 cur = cur->next; 19 } 20 return; 21 } 22 23 static void 24 parseDoc(char *docname) { 25 26 printf("enter function parseDoc\r\n"); 27 xmlDocPtr doc; 28 xmlNodePtr cur; 29 30 doc = xmlParseFile(docname); 31 32 if (doc == NULL ) { 33 fprintf(stderr,"Document not parsed successfully. \n"); 34 return; 35 } 36 37 cur = xmlDocGetRootElement(doc); 38 39 if (cur == NULL) { 40 fprintf(stderr,"empty document\n"); 41 xmlFreeDoc(doc); 42 return; 43 } 44 45 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) { 46 fprintf(stderr,"document of the wrong type, root node != story"); 47 xmlFreeDoc(doc); 48 return; 49 } 50 51 cur = cur->xmlChildrenNode; 52 while (cur != NULL) { 53 if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){ 54 parseStory (doc, cur); 55 } 56 57 cur = cur->next; 58 } 59 60 xmlFreeDoc(doc); 61 printf("exit function parseDoc\r\n"); 62 return; 63 } 64 65 int 66 main(int argc, char **argv) { 67 68 char *docname; 69 70 if (argc <= 1) { 71 printf("Usage: %s docname\n", argv[0]); 72 return(0); 73 } 74 75 docname = argv[1]; 76 parseDoc (docname); 77 78 return (1); 79 }
上面是代码的编译:
root@mkx:~/workspace/libxml2/learn.20211112# gcc -o exampleC exampleC.c -L/usr/local/lib -lxml2 -L/usr/local/lib -lz -lm -ldl -I/usr/local/include/libxml2root@mkx:~/workspace/libxml2/learn.20211112# lsexampleC exampleC.c story.xml
上面是代码的运行状况:
root@mkx:~/workspace/libxml2/learn.20211112# ./exampleC story.xml keyword: example keyword
看,获取了keyword所对应的值:example keyword