38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<![CDATA[
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/parser.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/xpath.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncxmlDocPtr
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncgetdoc (char *docname) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlDocPtr doc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = xmlParseFile(docname);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (doc == NULL ) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stderr,"Document not parsed successfully. \n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return doc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncxmlXPathObjectPtr
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncgetnodeset (xmlDocPtr doc, xmlChar *xpath){
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathContextPtr context;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathObjectPtr result;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync context = xmlXPathNewContext(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (context == NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("Error in xmlXPathNewContext\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync result = xmlXPathEvalExpression(xpath, context);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathFreeContext(context);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (result == NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("Error in xmlXPathEvalExpression\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathFreeObject(result);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("No result\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return result;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncint
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncmain(int argc, char **argv) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync char *docname;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlDocPtr doc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlChar *xpath = (xmlChar*) "//keyword";
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlNodeSetPtr nodeset;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathObjectPtr result;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int i;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlChar *keyword;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (argc <= 1) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("Usage: %s docname\n", argv[0]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync docname = argv[1];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = getdoc(docname);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync result = getnodeset (doc, xpath);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (result) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync nodeset = result->nodesetval;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync for (i=0; i < nodeset->nodeNr; i++) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("keyword: %s\n", keyword);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFree(keyword);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathFreeObject (result);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlCleanupParser();
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return (1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync]]>