aboutsummaryrefslogtreecommitdiff
path: root/libxml2-2.9.10/doc/tutorial/includexpath.c
diff options
context:
space:
mode:
Diffstat (limited to 'libxml2-2.9.10/doc/tutorial/includexpath.c')
-rw-r--r--libxml2-2.9.10/doc/tutorial/includexpath.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/libxml2-2.9.10/doc/tutorial/includexpath.c b/libxml2-2.9.10/doc/tutorial/includexpath.c
new file mode 100644
index 0000000..6b66e60
--- /dev/null
+++ b/libxml2-2.9.10/doc/tutorial/includexpath.c
@@ -0,0 +1,74 @@
+<![CDATA[
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+
+xmlDocPtr
+getdoc (char *docname) {
+ xmlDocPtr doc;
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return NULL;
+ }
+
+ return doc;
+}
+
+xmlXPathObjectPtr
+getnodeset (xmlDocPtr doc, xmlChar *xpath){
+
+ xmlXPathContextPtr context;
+ xmlXPathObjectPtr result;
+
+ context = xmlXPathNewContext(doc);
+ if (context == NULL) {
+ printf("Error in xmlXPathNewContext\n");
+ return NULL;
+ }
+ result = xmlXPathEvalExpression(xpath, context);
+ xmlXPathFreeContext(context);
+ if (result == NULL) {
+ printf("Error in xmlXPathEvalExpression\n");
+ return NULL;
+ }
+ if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
+ xmlXPathFreeObject(result);
+ printf("No result\n");
+ return NULL;
+ }
+ return result;
+}
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ xmlDocPtr doc;
+ xmlChar *xpath = (xmlChar*) "//keyword";
+ xmlNodeSetPtr nodeset;
+ xmlXPathObjectPtr result;
+ int i;
+ xmlChar *keyword;
+
+ if (argc <= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ doc = getdoc(docname);
+ result = getnodeset (doc, xpath);
+ if (result) {
+ nodeset = result->nodesetval;
+ for (i=0; i < nodeset->nodeNr; i++) {
+ keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
+ printf("keyword: %s\n", keyword);
+ xmlFree(keyword);
+ }
+ xmlXPathFreeObject (result);
+ }
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ return (1);
+}
+]]> \ No newline at end of file