• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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