includexpath.c revision d14bccc241b9e1cdf7718d7c86e4acfb768f2261
1bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT<![CDATA[
2bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT#include <libxml/parser.h>
3bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT#include <libxml/xpath.h>
4bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
5bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTxmlDocPtr
6bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTgetdoc (char *docname) {
7bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlDocPtr doc;
8bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	doc = xmlParseFile(docname);
9bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
10bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	if (doc == NULL ) {
11bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		fprintf(stderr,"Document not parsed successfully. \n");
12bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		return NULL;
13bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	}
14bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
15bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	return doc;
16bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT}
17bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
18bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTxmlXPathObjectPtr
19bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTgetnodeset (xmlDocPtr doc, xmlChar *xpath){
20bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
21bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlXPathContextPtr context;
22bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlXPathObjectPtr result;
23bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
24bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	context = xmlXPathNewContext(doc);
25bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	result = xmlXPathEvalExpression(xpath, context);
26bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
27bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT                printf("No result\n");
28bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		return NULL;
29bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	}
30bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlXPathFreeContext(context);
31bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	return result;
32bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT}
33bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTint
34bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDTmain(int argc, char **argv) {
35bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
36bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	char *docname;
37bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlDocPtr doc;
38bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlChar *xpath = ("//keyword");
39bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlNodeSetPtr nodeset;
40bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlXPathObjectPtr result;
41bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	int i;
42bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlChar *keyword;
43bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
44bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	if (argc <= 1) {
45bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		printf("Usage: %s docname\n", argv[0]);
46bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		return(0);
47bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	}
48bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT
49bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	docname = argv[1];
50bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	doc = getdoc(docname);
51bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	result = getnodeset (doc, xpath);
52bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	if (result) {
53bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		nodeset = result->nodesetval;
54bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		for (i=0; i < nodeset->nodeNr; i++) {
55bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT			keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
56bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		printf("keyword: %s\n", keyword);
57d14bccc241b9e1cdf7718d7c86e4acfb768f2261MST		xmlFree(keyword);
58bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT		}
59d14bccc241b9e1cdf7718d7c86e4acfb768f2261MST		xmlXPathFreeObject (result);
60bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	}
61bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlFreeDoc(doc);
62bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	xmlCleanupParser();
63bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT	return (1);
64bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT}
65bc6734a5c50a520a6e7dfce7f1fafd08ad6ea707MDT]]>
66