All pastes #795057 Raw Edit

Untitled

public c v1 · immutable
#795057 ·published 2007-11-23 17:14 UTC
rendered paste body
#include <libxml/parser.h>#include <libxml/xpath.h>xmlXPathObjectPtr _getXPathName(xmlDocPtr doc, xmlXPathContextPtr context, xmlChar *xpath);xmlXPathObjectPtr _getXPathValue(xmlDocPtr doc, xmlXPathContextPtr context, xmlChar *xpath);int main(int argc, char **argv) {  char *docname;  xmlDocPtr doc;  xmlXPathContextPtr context;  xmlNodeSetPtr nodeset;  xmlXPathObjectPtr psXPathTmp;  char *pszRequest;  xmlChar *pszUpdateSequence;  xmlChar *pszService;  xmlChar *pszVersion;  int i;  xmlChar *pszTmp;  if (argc <= 1) {    printf("Usage: %s <file>\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;  }  /* load context */  context = xmlXPathNewContext(doc);  if (context == NULL) {    printf("Error in xmlXPathNewContext\n");    return 1;  }  /* register namespaces */  if(xmlXPathRegisterNs(context, "sos", "http://www.opengis.net/sos/1.0") != 0 || xmlXPathRegisterNs(context, "ows", "http://www.opengis.net/ows") != 0) {      printf("Couldn't register namespaces\n");      return;  }  /* check for service */  psXPathTmp = _getXPathValue(doc, context, (xmlChar *)"/*/@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 updateSequence*/  psXPathTmp = _getXPathValue(doc, context, (xmlChar *)"/*/@updateSequence");  if (psXPathTmp) {    nodeset = psXPathTmp->nodesetval;    pszUpdateSequence = xmlNodeListGetString(doc, nodeset->nodeTab[0]->xmlChildrenNode, 1);    printf("updateSequence = %s\n", pszUpdateSequence);    xmlFree(pszUpdateSequence);  }  xmlXPathFreeObject(psXPathTmp);  /* check for version */  psXPathTmp = _getXPathValue(doc, context, (xmlChar *)"/*/ows:AcceptVersions/ows:Version");  if (psXPathTmp) {    nodeset = psXPathTmp->nodesetval;    pszVersion = xmlNodeListGetString(doc, nodeset->nodeTab[0]->xmlChildrenNode, 1);    printf("version = %s\n", pszVersion);    xmlFree(pszVersion);  }  xmlXPathFreeObject(psXPathTmp);  /* check for request */  psXPathTmp = _getXPathName(doc, context, (xmlChar *)"/*");  if (psXPathTmp) {    printf("foo\n");    nodeset = psXPathTmp->nodesetval;    pszVersion = xmlNodeListGetString(doc, nodeset->nodeTab[0]->xmlChildrenNode, 1);    printf("version = %s\n", pszVersion);    xmlFree(pszVersion);  }  xmlXPathFreeObject(psXPathTmp);  xmlXPathFreeContext(context);  xmlFreeDoc(doc);  xmlCleanupParser();  return;}xmlXPathObjectPtr _getXPathName(xmlDocPtr doc, xmlXPathContextPtr context, xmlChar *xpath){  xmlXPathObjectPtr result;  result = xmlXPathEval(xpath, context);  if (result == NULL) {    printf("Error in xmlXPathEvalExpression\n");    return NULL;  }  if(xmlXPathNodeSetIsEmpty(result->nodesetval)){    xmlXPathFreeObject(result);    return NULL;  }  return result;}xmlXPathObjectPtr _getXPathValue(xmlDocPtr doc, xmlXPathContextPtr context, xmlChar *xpath){  xmlXPathObjectPtr result;  result = xmlXPathEvalExpression(xpath, context);  if (result == NULL) {    printf("Error in xmlXPathEvalExpression\n");    return NULL;  }  if(xmlXPathNodeSetIsEmpty(result->nodesetval)){    xmlXPathFreeObject(result);    return NULL;  }  return result;}