Home | History | Annotate | Download | only in tutorial
      1 <![CDATA[
      2 #include <stdio.h>
      3 #include <string.h>
      4 #include <stdlib.h>
      5 #include <libxml/xmlmemory.h>
      6 #include <libxml/parser.h>
      7 
      8 void
      9 getReference (xmlDocPtr doc, xmlNodePtr cur) {
     10 
     11 	xmlChar *uri;
     12 	cur = cur->xmlChildrenNode;
     13 	while (cur != NULL) {
     14 	    if ((!xmlStrcmp(cur->name, (const xmlChar *)"reference"))) {
     15 		    uri = xmlGetProp(cur, "uri");
     16 		    printf("uri: %s\n", uri);
     17 		    xmlFree(uri);
     18 	    }
     19 	    cur = cur->next;
     20 	}
     21 	return;
     22 }
     23 
     24 
     25 void
     26 parseDoc(char *docname) {
     27 
     28 	xmlDocPtr doc;
     29 	xmlNodePtr cur;
     30 
     31 	doc = xmlParseFile(docname);
     32 
     33 	if (doc == NULL ) {
     34 		fprintf(stderr,"Document not parsed successfully. \n");
     35 		return;
     36 	}
     37 
     38 	cur = xmlDocGetRootElement(doc);
     39 
     40 	if (cur == NULL) {
     41 		fprintf(stderr,"empty document\n");
     42 		xmlFreeDoc(doc);
     43 		return;
     44 	}
     45 
     46 	if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
     47 		fprintf(stderr,"document of the wrong type, root node != story");
     48 		xmlFreeDoc(doc);
     49 		return;
     50 	}
     51 
     52 	getReference (doc, cur);
     53 	xmlFreeDoc(doc);
     54 	return;
     55 }
     56 
     57 int
     58 main(int argc, char **argv) {
     59 
     60 	char *docname;
     61 
     62 	if (argc <= 1) {
     63 		printf("Usage: %s docname\n", argv[0]);
     64 		return(0);
     65 	}
     66 
     67 	docname = argv[1];
     68 	parseDoc (docname);
     69 
     70 	return (1);
     71 }
     72 ]]>
     73