xpath.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:7k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /*
  2.  * xpath.c: interface for XML Path Language implementation
  3.  *
  4.  * Reference: W3C Working Draft 5 July 1999
  5.  *            http://www.w3.org/Style/XSL/Group/1999/07/xpath-19990705.html
  6.  *
  7.  * See COPYRIGHT for the status of this software
  8.  *
  9.  * Author: Daniel.Veillard@w3.org
  10.  */
  11. #ifndef __XML_XPATH_H__
  12. #define __XML_XPATH_H__
  13. #include <libxml/tree.h>
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. typedef struct _xmlXPathContext xmlXPathContext;
  18. typedef xmlXPathContext *xmlXPathContextPtr;
  19. typedef struct _xmlXPathParserContext xmlXPathParserContext;
  20. typedef xmlXPathParserContext *xmlXPathParserContextPtr;
  21. /*
  22.  * A node-set (an unordered collection of nodes without duplicates) 
  23.  */
  24. typedef struct _xmlNodeSet xmlNodeSet;
  25. typedef xmlNodeSet *xmlNodeSetPtr;
  26. struct _xmlNodeSet {
  27.     int nodeNr; /* # of node in the set */
  28.     int nodeMax; /* allocated space */
  29.     xmlNodePtr *nodeTab; /* array of nodes in no particular order */
  30. };
  31. /*
  32.  * An expression is evaluated to yield an object, which
  33.  * has one of the following four basic types:
  34.  *   - node-set
  35.  *   - boolean
  36.  *   - number
  37.  *   - string
  38.  */
  39. #define XPATH_UNDEFINED 0
  40. #define XPATH_NODESET 1
  41. #define XPATH_BOOLEAN 2
  42. #define XPATH_NUMBER 3
  43. #define XPATH_STRING 4
  44. #define XPATH_USERS 5
  45. typedef struct _xmlXPathObject xmlXPathObject;
  46. typedef xmlXPathObject *xmlXPathObjectPtr;
  47. struct _xmlXPathObject {
  48.     int type;
  49.     xmlNodeSetPtr nodesetval;
  50.     int boolval;
  51.     double floatval;
  52.     xmlChar *stringval;
  53.     void *user;
  54. };
  55. /*
  56.  * A conversion function is associated to a type and used to cast
  57.  * the new type to primitive values.
  58.  */
  59. typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
  60. /*
  61.  * Extra type: a name and a conversion function.
  62.  */
  63. typedef struct _xmlXPathType xmlXPathType;
  64. typedef xmlXPathType *xmlXPathTypePtr;
  65. struct _xmlXPathType {
  66.     const xmlChar         *name; /* the type name */
  67.     xmlXPathConvertFunc func; /* the conversion function */
  68. };
  69. /*
  70.  * Extra variable: a name and a value.
  71.  */
  72. typedef struct _xmlXPathVariable xmlXPathVariable;
  73. typedef xmlXPathVariable *xmlXPathVariablePtr;
  74. struct _xmlXPathVariable {
  75.     const xmlChar       *name; /* the variable name */
  76.     xmlXPathObjectPtr value; /* the value */
  77. };
  78. /*
  79.  * an evaluation function, the parameters are on the context stack
  80.  */
  81. typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt, int nargs);
  82. /*
  83.  * Extra function: a name and a evaluation function.
  84.  */
  85. typedef struct _xmlXPathFunct xmlXPathFunct;
  86. typedef xmlXPathFunct *xmlXPathFuncPtr;
  87. struct _xmlXPathFunct {
  88.     const xmlChar      *name; /* the function name */
  89.     xmlXPathEvalFunc func; /* the evaluation function */
  90. };
  91. /*
  92.  * An axis traversal function. To traverse an axis, the engine calls
  93.  * the first time with cur == NULL and repeat until the function returns
  94.  * NULL indicating the end of the axis traversal.
  95.  */
  96. typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
  97.  xmlXPathObjectPtr cur);
  98. /*
  99.  * Extra axis: a name and an axis function.
  100.  */
  101. typedef struct _xmlXPathAxis xmlXPathAxis;
  102. typedef xmlXPathAxis *xmlXPathAxisPtr;
  103. struct _xmlXPathAxis {
  104.     const xmlChar      *name; /* the axis name */
  105.     xmlXPathAxisFunc func; /* the search function */
  106. };
  107. /* 
  108.  * Expression evaluation occurs with respect to a context.
  109.  * he context consists of:
  110.  *    - a node (the context node) 
  111.  *    - a node list (the context node list) 
  112.  *    - a set of variable bindings 
  113.  *    - a function library 
  114.  *    - the set of namespace declarations in scope for the expression 
  115.  */
  116. struct _xmlXPathContext {
  117.     xmlDocPtr doc; /* The current document */
  118.     xmlNodePtr node; /* The current node */
  119.     xmlNodeSetPtr nodelist; /* The current node list */
  120.     int nb_variables; /* number of defined variables */
  121.     int max_variables; /* max number of variables */
  122.     xmlXPathVariablePtr *variables; /* Array of defined variables */
  123.     int nb_types; /* number of defined types */
  124.     int max_types; /* max number of types */
  125.     xmlXPathTypePtr *types; /* Array of defined types */
  126.     int nb_funcs; /* number of defined funcs */
  127.     int max_funcs; /* max number of funcs */
  128.     xmlXPathFuncPtr *funcs; /* Array of defined funcs */
  129.     int nb_axis; /* number of defined axis */
  130.     int max_axis; /* max number of axis */
  131.     xmlXPathAxisPtr *axis; /* Array of defined axis */
  132.     /* Namespace traversal should be implemented with user */
  133.     xmlNsPtr *namespaces; /* The namespaces lookup */
  134.     int nsNr; /* the current Namespace index */
  135.     void *user; /* user defined extra info */
  136. };
  137. /*
  138.  * An XPath parser context, it contains pure parsing informations,
  139.  * an xmlXPathContext, and the stack of objects.
  140.  */
  141. struct _xmlXPathParserContext {
  142.     const xmlChar *cur; /* the current char being parsed */
  143.     const xmlChar *base; /* the full expression */
  144.     int error; /* error code */
  145.     xmlXPathContextPtr  context; /* the evaluation context */
  146.     xmlXPathObjectPtr     value; /* the current value */
  147.     int                 valueNr; /* number of values stacked */
  148.     int                valueMax; /* max number of values stacked */
  149.     xmlXPathObjectPtr *valueTab; /* stack of values */
  150. };
  151. /*
  152.  * An XPath function
  153.  * The arguments (if any) are popped out of the context stack
  154.  * and the result is pushed on the stack.
  155.  */
  156. typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
  157. /************************************************************************
  158.  * *
  159.  * Public API *
  160.  * *
  161.  ************************************************************************/
  162. /**
  163.  * Registering extensions to the expression language
  164.  */
  165. /* TODO */ int    xmlXPathRegisterType (xmlXPathContextPtr ctxt,
  166.  const xmlChar *name,
  167.                                                  xmlXPathConvertFunc f);
  168. /* TODO */ int    xmlXPathRegisterAxis (xmlXPathContextPtr ctxt,
  169.  const xmlChar *name,
  170.  xmlXPathAxisFunc f);
  171. /* TODO */ int    xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
  172.  const xmlChar *name,
  173.  xmlXPathFunction f);
  174. /* TODO */ int    xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
  175.  const xmlChar *name,
  176.  xmlXPathObject value);
  177. /**
  178.  * Evaluation functions.
  179.  */
  180. xmlXPathContextPtr xmlXPathNewContext (xmlDocPtr doc);
  181. void    xmlXPathFreeContext (xmlXPathContextPtr ctxt);
  182. xmlXPathObjectPtr  xmlXPathEval (const xmlChar *str,
  183.  xmlXPathContextPtr ctxt);
  184. void    xmlXPathFreeObject (xmlXPathObjectPtr obj);
  185. xmlXPathObjectPtr  xmlXPathEvalExpression (const xmlChar *str,
  186.  xmlXPathContextPtr ctxt);
  187. xmlNodeSetPtr    xmlXPathNodeSetCreate (xmlNodePtr val);
  188. void    xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
  189. void    xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
  190. #ifdef __cplusplus
  191. }
  192. #endif
  193. #endif /* ! __XML_XPATH_H__ */