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