blob: 7e8bc3770e5f7a71d4db4b857b51d7eb14b345bd [file] [log] [blame]
MDT 2003 John Fleckbc6734a2003-08-28 15:01:40 +00001<![CDATA[
2#include <libxml/parser.h>
3#include <libxml/xpath.h>
4
5xmlDocPtr
6getdoc (char *docname) {
7 xmlDocPtr doc;
8 doc = xmlParseFile(docname);
9
10 if (doc == NULL ) {
11 fprintf(stderr,"Document not parsed successfully. \n");
12 return NULL;
13 }
14
15 return doc;
16}
17
18xmlXPathObjectPtr
19getnodeset (xmlDocPtr doc, xmlChar *xpath){
20
21 xmlXPathContextPtr context;
22 xmlXPathObjectPtr result;
23
24 context = xmlXPathNewContext(doc);
25 result = xmlXPathEvalExpression(xpath, context);
26 if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
27 printf("No result\n");
28 return NULL;
29 }
30 xmlXPathFreeContext(context);
31 return result;
32}
33int
34main(int argc, char **argv) {
35
36 char *docname;
37 xmlDocPtr doc;
MDT 2004 John Fleck218ed392004-05-28 01:49:38 +000038 xmlChar *xpath = (xmlChar*) "//keyword";
MDT 2003 John Fleckbc6734a2003-08-28 15:01:40 +000039 xmlNodeSetPtr nodeset;
40 xmlXPathObjectPtr result;
41 int i;
42 xmlChar *keyword;
43
44 if (argc <= 1) {
45 printf("Usage: %s docname\n", argv[0]);
46 return(0);
47 }
48
49 docname = argv[1];
50 doc = getdoc(docname);
51 result = getnodeset (doc, xpath);
52 if (result) {
53 nodeset = result->nodesetval;
54 for (i=0; i < nodeset->nodeNr; i++) {
55 keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
56 printf("keyword: %s\n", keyword);
MST 2004 John Fleckd14bccc2004-02-15 01:57:42 +000057 xmlFree(keyword);
MDT 2003 John Fleckbc6734a2003-08-28 15:01:40 +000058 }
MST 2004 John Fleckd14bccc2004-02-15 01:57:42 +000059 xmlXPathFreeObject (result);
MDT 2003 John Fleckbc6734a2003-08-28 15:01:40 +000060 }
MDT 2003 John Fleckbc6734a2003-08-28 15:01:40 +000061 xmlFreeDoc(doc);
62 xmlCleanupParser();
63 return (1);
64}
65]]>