File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / doc / tutorial / includexpath.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:59 2012 UTC (12 years, 4 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>