D. Code for XPath Example
Prev |  | Next

## D. Code for XPath Example

    #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*) "//keyword";
    	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("keyword: %s\n", keyword);
    		xmlFree(keyword);
    		}
    		xmlXPathFreeObject (result);
    	}
    	xmlFreeDoc(doc);
    	xmlCleanupParser();
    	return (1);
    }

Prev | Up | Next
C. Code for Keyword Example | Home | E. Code for Add Keyword Example