Edit

kc3-lang/libxml2/doc/tutorial/includexpath.c

Branch :

  • Show log

    Commit

  • Author : MDT 2004 John Fleck
    Date : 2004-08-25 02:51:27
    Hash : 4c3bb7d8
    Message : doc/tutorial/xmltutorial.xml, xmltutorial.pdf, *.html fix Xpath memory Tue Aug 24 20:49:15 MDT 2004 John Fleck <jfleck@inkstain.net> * doc/tutorial/xmltutorial.xml, xmltutorial.pdf, *.html fix Xpath memory leak (thanks to sKaBoy and William Brack)

  • doc/tutorial/includexpath.c
  • <![CDATA[
    #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);
    }
    ]]>