1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <![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);
- }
- ]]>
|