/ libxml2 / doc / tutorial / includeaddkeyword.c
includeaddkeyword.c
 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  ]]>