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); 254c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT if (context == NULL) { 264c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT printf("Error in xmlXPathNewContext\n"); 274c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT return NULL; 284c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT } 29bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT result = xmlXPathEvalExpression(xpath, context); 304c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT xmlXPathFreeContext(context); 314c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT if (result == NULL) { 324c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT printf("Error in xmlXPathEvalExpression\n"); 334c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT return NULL; 344c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT } 35bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if(xmlXPathNodeSetIsEmpty(result->nodesetval)){ 364c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT xmlXPathFreeObject(result); 37bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT printf("No result\n"); 38bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return NULL; 39bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 40bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return result; 41bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT} 42bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTint 43bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTmain(int argc, char **argv) { 44bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 45bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT char *docname; 46bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlDocPtr doc; 47218ed39dc40c31c1e27d1d9a8c4c8765aa1b3dc3MDT xmlChar *xpath = (xmlChar*) "//keyword"; 48bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlNodeSetPtr nodeset; 49bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlXPathObjectPtr result; 50bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT int i; 51bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlChar *keyword; 52bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 53bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if (argc <= 1) { 54bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT printf("Usage: %s docname\n", argv[0]); 55bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return(0); 56bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 57bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT 58bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT docname = argv[1]; 59bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT doc = getdoc(docname); 60bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT result = getnodeset (doc, xpath); 61bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT if (result) { 62bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT nodeset = result->nodesetval; 63bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT for (i=0; i < nodeset->nodeNr; i++) { 64bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1); 65bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT printf("keyword: %s\n", keyword); 66d14bccc241b9e1cdf7718d7c86e4acfb768f2261MST xmlFree(keyword); 67bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 68d14bccc241b9e1cdf7718d7c86e4acfb768f2261MST xmlXPathFreeObject (result); 69bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT } 70bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlFreeDoc(doc); 71bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT xmlCleanupParser(); 72bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT return (1); 73bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT} 744c3bb7d8a20c5262882af7fcd41afe3b3d482f12MDT]]>