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 
9 xmlDocPtr
10 parseDoc(char *docname, char *uri) {
11 
12 	xmlDocPtr doc;
13 	xmlNodePtr cur;
14 	xmlNodePtr newnode;
15 	xmlAttrPtr newattr;
16 
17 	doc = xmlParseFile(docname);
18 
19 	if (doc == NULL ) {
20 		fprintf(stderr,"Document not parsed successfully. \n");
21 		return (NULL);
22 	}
23 
24 	cur = xmlDocGetRootElement(doc);
25 
26 	if (cur == NULL) {
27 		fprintf(stderr,"empty document\n");
28 		xmlFreeDoc(doc);
29 		return (NULL);
30 	}
31 
32 	if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
33 		fprintf(stderr,"document of the wrong type, root node != story");
34 		xmlFreeDoc(doc);
35 		return (NULL);
36 	}
37 
38 	newnode = xmlNewTextChild (cur, NULL, "reference", NULL);
39 	newattr = xmlNewProp (newnode, "uri", uri);
40 	return(doc);
41 }
42 
43 int
44 main(int argc, char **argv) {
45 
46 	char *docname;
47 	char *uri;
48 	xmlDocPtr doc;
49 
50 	if (argc <= 2) {
51 		printf("Usage: %s docname, uri\n", argv[0]);
52 		return(0);
53 	}
54 
55 	docname = argv[1];
56 	uri = argv[2];
57 	doc = parseDoc (docname, uri);
58 	if (doc != NULL) {
59 		xmlSaveFormatFile (docname, doc, 1);
60 		xmlFreeDoc(doc);
61 	}
62 	return (1);
63 }
64 ]]>
65