00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __XML_XPATH_H__
00020 #define __XML_XPATH_H__
00021
00022 #include <libxml/xmlversion.h>
00023
00024 #ifdef LIBXML_XPATH_ENABLED
00025
00026 #include <libxml/xmlerror.h>
00027 #include <libxml/tree.h>
00028 #include <libxml/hash.h>
00029 #endif
00030
00031 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035 #endif
00036
00037 #ifdef LIBXML_XPATH_ENABLED
00038
00039 typedef struct _xmlXPathContext xmlXPathContext;
00040 typedef xmlXPathContext *xmlXPathContextPtr;
00041 typedef struct _xmlXPathParserContext xmlXPathParserContext;
00042 typedef xmlXPathParserContext *xmlXPathParserContextPtr;
00043
00048 typedef enum {
00049 XPATH_EXPRESSION_OK = 0,
00050 XPATH_NUMBER_ERROR,
00051 XPATH_UNFINISHED_LITERAL_ERROR,
00052 XPATH_START_LITERAL_ERROR,
00053 XPATH_VARIABLE_REF_ERROR,
00054 XPATH_UNDEF_VARIABLE_ERROR,
00055 XPATH_INVALID_PREDICATE_ERROR,
00056 XPATH_EXPR_ERROR,
00057 XPATH_UNCLOSED_ERROR,
00058 XPATH_UNKNOWN_FUNC_ERROR,
00059 XPATH_INVALID_OPERAND,
00060 XPATH_INVALID_TYPE,
00061 XPATH_INVALID_ARITY,
00062 XPATH_INVALID_CTXT_SIZE,
00063 XPATH_INVALID_CTXT_POSITION,
00064 XPATH_MEMORY_ERROR,
00065 XPTR_SYNTAX_ERROR,
00066 XPTR_RESOURCE_ERROR,
00067 XPTR_SUB_RESOURCE_ERROR,
00068 XPATH_UNDEF_PREFIX_ERROR,
00069 XPATH_ENCODING_ERROR,
00070 XPATH_INVALID_CHAR_ERROR,
00071 XPATH_INVALID_CTXT
00072 } xmlXPathError;
00073
00074
00075
00076
00077 typedef struct _xmlNodeSet xmlNodeSet;
00078 typedef xmlNodeSet *xmlNodeSetPtr;
00079 struct _xmlNodeSet {
00080 int nodeNr;
00081 int nodeMax;
00082 xmlNodePtr *nodeTab;
00083
00084 };
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 typedef enum {
00098 XPATH_UNDEFINED = 0,
00099 XPATH_NODESET = 1,
00100 XPATH_BOOLEAN = 2,
00101 XPATH_NUMBER = 3,
00102 XPATH_STRING = 4,
00103 XPATH_POINT = 5,
00104 XPATH_RANGE = 6,
00105 XPATH_LOCATIONSET = 7,
00106 XPATH_USERS = 8,
00107 XPATH_XSLT_TREE = 9
00108 } xmlXPathObjectType;
00109
00110 typedef struct _xmlXPathObject xmlXPathObject;
00111 typedef xmlXPathObject *xmlXPathObjectPtr;
00112 struct _xmlXPathObject {
00113 xmlXPathObjectType type;
00114 xmlNodeSetPtr nodesetval;
00115 int boolval;
00116 double floatval;
00117 xmlChar *stringval;
00118 void *user;
00119 int index;
00120 void *user2;
00121 int index2;
00122 };
00123
00134 typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
00135
00136
00137
00138
00139
00140 typedef struct _xmlXPathType xmlXPathType;
00141 typedef xmlXPathType *xmlXPathTypePtr;
00142 struct _xmlXPathType {
00143 const xmlChar *name;
00144 xmlXPathConvertFunc func;
00145 };
00146
00147
00148
00149
00150
00151 typedef struct _xmlXPathVariable xmlXPathVariable;
00152 typedef xmlXPathVariable *xmlXPathVariablePtr;
00153 struct _xmlXPathVariable {
00154 const xmlChar *name;
00155 xmlXPathObjectPtr value;
00156 };
00157
00166 typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
00167 int nargs);
00168
00169
00170
00171
00172
00173 typedef struct _xmlXPathFunct xmlXPathFunct;
00174 typedef xmlXPathFunct *xmlXPathFuncPtr;
00175 struct _xmlXPathFunct {
00176 const xmlChar *name;
00177 xmlXPathEvalFunc func;
00178 };
00179
00192 typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
00193 xmlXPathObjectPtr cur);
00194
00195
00196
00197
00198
00199 typedef struct _xmlXPathAxis xmlXPathAxis;
00200 typedef xmlXPathAxis *xmlXPathAxisPtr;
00201 struct _xmlXPathAxis {
00202 const xmlChar *name;
00203 xmlXPathAxisFunc func;
00204 };
00205
00216 typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
00217
00218
00219
00220
00221
00233 typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
00234 const xmlChar *name,
00235 const xmlChar *ns_uri);
00236
00248 typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
00249 const xmlChar *name,
00250 const xmlChar *ns_uri);
00251
00261 #define XML_XPATH_CHECKNS (1<<0)
00262
00267 #define XML_XPATH_NOVAR (1<<1)
00268
00283 struct _xmlXPathContext {
00284 xmlDocPtr doc;
00285 xmlNodePtr node;
00286
00287 int nb_variables_unused;
00288 int max_variables_unused;
00289 xmlHashTablePtr varHash;
00290
00291 int nb_types;
00292 int max_types;
00293 xmlXPathTypePtr types;
00294
00295 int nb_funcs_unused;
00296 int max_funcs_unused;
00297 xmlHashTablePtr funcHash;
00298
00299 int nb_axis;
00300 int max_axis;
00301 xmlXPathAxisPtr axis;
00302
00303
00304 xmlNsPtr *namespaces;
00305 int nsNr;
00306 void *user;
00307
00308
00309 int contextSize;
00310 int proximityPosition;
00311
00312
00313 int xptr;
00314 xmlNodePtr here;
00315 xmlNodePtr origin;
00316
00317
00318 xmlHashTablePtr nsHash;
00319 xmlXPathVariableLookupFunc varLookupFunc;
00320 void *varLookupData;
00321
00322
00323 void *extra;
00324
00325
00326 const xmlChar *function;
00327 const xmlChar *functionURI;
00328
00329
00330 xmlXPathFuncLookupFunc funcLookupFunc;
00331 void *funcLookupData;
00332
00333
00334 xmlNsPtr *tmpNsList;
00335 int tmpNsNr;
00336
00337
00338 void *userData;
00339 xmlStructuredErrorFunc error;
00340 xmlError lastError;
00341 xmlNodePtr debugNode;
00342
00343
00344 xmlDictPtr dict;
00345
00346 int flags;
00347
00348
00349 void *cache;
00350 };
00351
00352
00353
00354
00355
00356 typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
00357 typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
00358
00365 struct _xmlXPathParserContext {
00366 const xmlChar *cur;
00367 const xmlChar *base;
00368
00369 int error;
00370
00371 xmlXPathContextPtr context;
00372 xmlXPathObjectPtr value;
00373 int valueNr;
00374 int valueMax;
00375 xmlXPathObjectPtr *valueTab;
00376
00377 xmlXPathCompExprPtr comp;
00378 int xptr;
00379 xmlNodePtr ancestor;
00380 };
00381
00382
00383
00384
00385
00386
00387
00392 XMLPUBVAR double xmlXPathNAN;
00393 XMLPUBVAR double xmlXPathPINF;
00394 XMLPUBVAR double xmlXPathNINF;
00395
00396
00405 #define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
00406
00416 #define xmlXPathNodeSetItem(ns, index) \
00417 ((((ns) != NULL) && \
00418 ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
00419 (ns)->nodeTab[(index)] \
00420 : NULL)
00421
00429 #define xmlXPathNodeSetIsEmpty(ns) \
00430 (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
00431
00432
00433 XMLPUBFUN void XMLCALL
00434 xmlXPathFreeObject (xmlXPathObjectPtr obj);
00435 XMLPUBFUN xmlNodeSetPtr XMLCALL
00436 xmlXPathNodeSetCreate (xmlNodePtr val);
00437 XMLPUBFUN void XMLCALL
00438 xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
00439 XMLPUBFUN void XMLCALL
00440 xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
00441 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00442 xmlXPathObjectCopy (xmlXPathObjectPtr val);
00443 XMLPUBFUN int XMLCALL
00444 xmlXPathCmpNodes (xmlNodePtr node1,
00445 xmlNodePtr node2);
00449 XMLPUBFUN int XMLCALL
00450 xmlXPathCastNumberToBoolean (double val);
00451 XMLPUBFUN int XMLCALL
00452 xmlXPathCastStringToBoolean (const xmlChar * val);
00453 XMLPUBFUN int XMLCALL
00454 xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
00455 XMLPUBFUN int XMLCALL
00456 xmlXPathCastToBoolean (xmlXPathObjectPtr val);
00457
00458 XMLPUBFUN double XMLCALL
00459 xmlXPathCastBooleanToNumber (int val);
00460 XMLPUBFUN double XMLCALL
00461 xmlXPathCastStringToNumber (const xmlChar * val);
00462 XMLPUBFUN double XMLCALL
00463 xmlXPathCastNodeToNumber (xmlNodePtr node);
00464 XMLPUBFUN double XMLCALL
00465 xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
00466 XMLPUBFUN double XMLCALL
00467 xmlXPathCastToNumber (xmlXPathObjectPtr val);
00468
00469 XMLPUBFUN xmlChar * XMLCALL
00470 xmlXPathCastBooleanToString (int val);
00471 XMLPUBFUN xmlChar * XMLCALL
00472 xmlXPathCastNumberToString (double val);
00473 XMLPUBFUN xmlChar * XMLCALL
00474 xmlXPathCastNodeToString (xmlNodePtr node);
00475 XMLPUBFUN xmlChar * XMLCALL
00476 xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
00477 XMLPUBFUN xmlChar * XMLCALL
00478 xmlXPathCastToString (xmlXPathObjectPtr val);
00479
00480 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00481 xmlXPathConvertBoolean (xmlXPathObjectPtr val);
00482 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00483 xmlXPathConvertNumber (xmlXPathObjectPtr val);
00484 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00485 xmlXPathConvertString (xmlXPathObjectPtr val);
00486
00490 XMLPUBFUN xmlXPathContextPtr XMLCALL
00491 xmlXPathNewContext (xmlDocPtr doc);
00492 XMLPUBFUN void XMLCALL
00493 xmlXPathFreeContext (xmlXPathContextPtr ctxt);
00494 XMLPUBFUN int XMLCALL
00495 xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
00496 int active,
00497 int value,
00498 int options);
00502 XMLPUBFUN long XMLCALL
00503 xmlXPathOrderDocElems (xmlDocPtr doc);
00504 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00505 xmlXPathEval (const xmlChar *str,
00506 xmlXPathContextPtr ctx);
00507 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00508 xmlXPathEvalExpression (const xmlChar *str,
00509 xmlXPathContextPtr ctxt);
00510 XMLPUBFUN int XMLCALL
00511 xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
00512 xmlXPathObjectPtr res);
00516 XMLPUBFUN xmlXPathCompExprPtr XMLCALL
00517 xmlXPathCompile (const xmlChar *str);
00518 XMLPUBFUN xmlXPathCompExprPtr XMLCALL
00519 xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
00520 const xmlChar *str);
00521 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00522 xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
00523 xmlXPathContextPtr ctx);
00524 XMLPUBFUN int XMLCALL
00525 xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
00526 xmlXPathContextPtr ctxt);
00527 XMLPUBFUN void XMLCALL
00528 xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
00529 #endif
00530 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
00531 XMLPUBFUN void XMLCALL
00532 xmlXPathInit (void);
00533 XMLPUBFUN int XMLCALL
00534 xmlXPathIsNaN (double val);
00535 XMLPUBFUN int XMLCALL
00536 xmlXPathIsInf (double val);
00537
00538 #ifdef __cplusplus
00539 }
00540 #endif
00541
00542 #endif
00543 #endif