includexpath.c revision d14bccc241b9e1cdf7718d7c86e4acfb768f2261
1bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT<![CDATA[ 2bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT#include <libxml/parser.h> 3bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT#include <libxml/xpath.h> 4bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 5bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTxmlDocPtr 6bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTgetdoc (char *docname) { 7bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlDocPtr doc; 8bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT doc = xmlParseFile(docname); 9bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 10bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if (doc == NULL ) { 11bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT fprintf(stderr,"Document not parsed successfully. \n"); 12bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return NULL; 13bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 14bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 15bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return doc; 16bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT} 17bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 18bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTxmlXPathObjectPtr 19bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTgetnodeset (xmlDocPtr doc, xmlChar *xpath){ 20bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 21bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlXPathContextPtr context; 22bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlXPathObjectPtr result; 23bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 24bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT context = xmlXPathNewContext(doc); 25bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT result = xmlXPathEvalExpression(xpath, context); 26bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if(xmlXPathNodeSetIsEmpty(result->nodesetval)){ 27bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT printf("No result\n"); 28bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return NULL; 29bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 30bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlXPathFreeContext(context); 31bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return result; 32bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT} 33bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTint 34bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTmain(int argc, char **argv) { 35bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 36bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT char *docname; 37bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlDocPtr doc; 38bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlChar *xpath = ("//keyword"); 39bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlNodeSetPtr nodeset; 40bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlXPathObjectPtr result; 41bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT int i; 42bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlChar *keyword; 43bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 44bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if (argc <= 1) { 45bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT printf("Usage: %s docname\n", argv[0]); 46bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return(0); 47bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 48bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 49bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT docname = argv[1]; 50bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT doc = getdoc(docname); 51bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT result = getnodeset (doc, xpath); 52bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if (result) { 53bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT nodeset = result->nodesetval; 54bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT for (i=0; i < nodeset->nodeNr; i++) { 55bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1); 56bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT printf("keyword: %s\n", keyword); 57d14bccc241b9e1cdf7718d7c86e4acfb768f2261MST xmlFree(keyword); 58bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 59d14bccc241b9e1cdf7718d7c86e4acfb768f2261MST xmlXPathFreeObject (result); 60bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 61bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlFreeDoc(doc); 62bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlCleanupParser(); 63bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return (1); 64bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT} 65bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT]]> 66