#include #include xmlXPathObjectPtr _getXPath(xmlDocPtr doc, xmlChar *xpath); int main(int argc, char **argv) { char *docname; xmlDocPtr doc; xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; xmlXPathObjectPtr psXPathTmp; char *pszRequest; xmlChar *pszService; xmlChar *pszVersion; int i; xmlChar *pszTmp; if (argc <= 1) { printf("Usage: %s \n", argv[0]); return(0); } /* load document */ docname = argv[1]; doc = xmlParseFile(docname); if (doc == NULL ) { fprintf(stderr,"Document not parsed successfully. \n"); return 1; } /* check for request */ result = _getXPath(doc, (xmlChar *)"/GetCapabilities"); if (result) { pszRequest = "GetCapabilities"; printf("request = GetCapabilities\n"); /* check for service */ psXPathTmp = _getXPath(doc, (xmlChar *)"/GetCapabilities/@service"); if (psXPathTmp) { nodeset = psXPathTmp->nodesetval; pszService = xmlNodeListGetString(doc, nodeset->nodeTab[0]->xmlChildrenNode, 1); printf("service = %s\n", pszService); xmlFree(pszService); } xmlXPathFreeObject (psXPathTmp); /* check for version */ psXPathTmp = _getXPath(doc, (xmlChar *)"/sos:GetCapabilities/@version"); if (psXPathTmp) { nodeset = psXPathTmp->nodesetval; pszVersion = xmlNodeListGetString(doc, nodeset->nodeTab[0]->xmlChildrenNode, 1); printf("version = %s\n", pszVersion); xmlFree(pszVersion); } xmlXPathFreeObject (result); xmlXPathFreeObject (psXPathTmp); } xmlFreeDoc(doc); xmlCleanupParser(); return; } xmlXPathObjectPtr _getXPath(xmlDocPtr doc, xmlChar *xpath){ xmlXPathContextPtr context; xmlXPathObjectPtr result; /* load document */ context = xmlXPathNewContext(doc); if (context == NULL) { printf("Error in xmlXPathNewContext\n"); return NULL; } /* register namespaces */ if(xmlXPathRegisterNs(context, "sos", "http://www.opengis.net/sos/1.0") != 0) { printf("Couldn't register namespace\n"); return; } 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; }