Annotation of embedaddon/libxml2/doc/tutorial/includexpath.c, revision 1.1
1.1 ! misho 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>