File indexing completed on 2025-12-16 10:19:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef __XML_XPATH_H__
0020 #define __XML_XPATH_H__
0021
0022 #include <libxml/xmlversion.h>
0023
0024 #ifdef LIBXML_XPATH_ENABLED
0025
0026 #include <libxml/xmlerror.h>
0027 #include <libxml/tree.h>
0028 #include <libxml/hash.h>
0029 #endif
0030
0031 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
0032 #ifdef __cplusplus
0033 extern "C" {
0034 #endif
0035 #endif
0036
0037 #ifdef LIBXML_XPATH_ENABLED
0038
0039 typedef struct _xmlXPathContext xmlXPathContext;
0040 typedef xmlXPathContext *xmlXPathContextPtr;
0041 typedef struct _xmlXPathParserContext xmlXPathParserContext;
0042 typedef xmlXPathParserContext *xmlXPathParserContextPtr;
0043
0044
0045
0046
0047
0048 typedef enum {
0049 XPATH_EXPRESSION_OK = 0,
0050 XPATH_NUMBER_ERROR,
0051 XPATH_UNFINISHED_LITERAL_ERROR,
0052 XPATH_START_LITERAL_ERROR,
0053 XPATH_VARIABLE_REF_ERROR,
0054 XPATH_UNDEF_VARIABLE_ERROR,
0055 XPATH_INVALID_PREDICATE_ERROR,
0056 XPATH_EXPR_ERROR,
0057 XPATH_UNCLOSED_ERROR,
0058 XPATH_UNKNOWN_FUNC_ERROR,
0059 XPATH_INVALID_OPERAND,
0060 XPATH_INVALID_TYPE,
0061 XPATH_INVALID_ARITY,
0062 XPATH_INVALID_CTXT_SIZE,
0063 XPATH_INVALID_CTXT_POSITION,
0064 XPATH_MEMORY_ERROR,
0065 XPTR_SYNTAX_ERROR,
0066 XPTR_RESOURCE_ERROR,
0067 XPTR_SUB_RESOURCE_ERROR,
0068 XPATH_UNDEF_PREFIX_ERROR,
0069 XPATH_ENCODING_ERROR,
0070 XPATH_INVALID_CHAR_ERROR,
0071 XPATH_INVALID_CTXT,
0072 XPATH_STACK_ERROR,
0073 XPATH_FORBID_VARIABLE_ERROR,
0074 XPATH_OP_LIMIT_EXCEEDED,
0075 XPATH_RECURSION_LIMIT_EXCEEDED
0076 } xmlXPathError;
0077
0078
0079
0080
0081 typedef struct _xmlNodeSet xmlNodeSet;
0082 typedef xmlNodeSet *xmlNodeSetPtr;
0083 struct _xmlNodeSet {
0084 int nodeNr;
0085 int nodeMax;
0086 xmlNodePtr *nodeTab;
0087
0088 };
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101 typedef enum {
0102 XPATH_UNDEFINED = 0,
0103 XPATH_NODESET = 1,
0104 XPATH_BOOLEAN = 2,
0105 XPATH_NUMBER = 3,
0106 XPATH_STRING = 4,
0107 #ifdef LIBXML_XPTR_LOCS_ENABLED
0108 XPATH_POINT = 5,
0109 XPATH_RANGE = 6,
0110 XPATH_LOCATIONSET = 7,
0111 #endif
0112 XPATH_USERS = 8,
0113 XPATH_XSLT_TREE = 9
0114 } xmlXPathObjectType;
0115
0116 #ifndef LIBXML_XPTR_LOCS_ENABLED
0117
0118 #define XPATH_POINT 5
0119 #define XPATH_RANGE 6
0120 #define XPATH_LOCATIONSET 7
0121
0122 #endif
0123
0124 typedef struct _xmlXPathObject xmlXPathObject;
0125 typedef xmlXPathObject *xmlXPathObjectPtr;
0126 struct _xmlXPathObject {
0127 xmlXPathObjectType type;
0128 xmlNodeSetPtr nodesetval;
0129 int boolval;
0130 double floatval;
0131 xmlChar *stringval;
0132 void *user;
0133 int index;
0134 void *user2;
0135 int index2;
0136 };
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148 typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
0149
0150
0151
0152
0153
0154 typedef struct _xmlXPathType xmlXPathType;
0155 typedef xmlXPathType *xmlXPathTypePtr;
0156 struct _xmlXPathType {
0157 const xmlChar *name;
0158 xmlXPathConvertFunc func;
0159 };
0160
0161
0162
0163
0164
0165 typedef struct _xmlXPathVariable xmlXPathVariable;
0166 typedef xmlXPathVariable *xmlXPathVariablePtr;
0167 struct _xmlXPathVariable {
0168 const xmlChar *name;
0169 xmlXPathObjectPtr value;
0170 };
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180 typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
0181 int nargs);
0182
0183
0184
0185
0186
0187 typedef struct _xmlXPathFunct xmlXPathFunct;
0188 typedef xmlXPathFunct *xmlXPathFuncPtr;
0189 struct _xmlXPathFunct {
0190 const xmlChar *name;
0191 xmlXPathEvalFunc func;
0192 };
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206 typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
0207 xmlXPathObjectPtr cur);
0208
0209
0210
0211
0212
0213 typedef struct _xmlXPathAxis xmlXPathAxis;
0214 typedef xmlXPathAxis *xmlXPathAxisPtr;
0215 struct _xmlXPathAxis {
0216 const xmlChar *name;
0217 xmlXPathAxisFunc func;
0218 };
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230 typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247 typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
0248 const xmlChar *name,
0249 const xmlChar *ns_uri);
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262 typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
0263 const xmlChar *name,
0264 const xmlChar *ns_uri);
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275 #define XML_XPATH_CHECKNS (1<<0)
0276
0277
0278
0279
0280
0281 #define XML_XPATH_NOVAR (1<<1)
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300 struct _xmlXPathContext {
0301 xmlDocPtr doc;
0302 xmlNodePtr node;
0303
0304 int nb_variables_unused;
0305 int max_variables_unused;
0306 xmlHashTablePtr varHash;
0307
0308 int nb_types;
0309 int max_types;
0310 xmlXPathTypePtr types;
0311
0312 int nb_funcs_unused;
0313 int max_funcs_unused;
0314 xmlHashTablePtr funcHash;
0315
0316 int nb_axis;
0317 int max_axis;
0318 xmlXPathAxisPtr axis;
0319
0320
0321 xmlNsPtr *namespaces;
0322 int nsNr;
0323 void *user;
0324
0325
0326 int contextSize;
0327 int proximityPosition;
0328
0329
0330 int xptr;
0331 xmlNodePtr here;
0332 xmlNodePtr origin;
0333
0334
0335 xmlHashTablePtr nsHash;
0336 xmlXPathVariableLookupFunc varLookupFunc;
0337 void *varLookupData;
0338
0339
0340 void *extra;
0341
0342
0343 const xmlChar *function;
0344 const xmlChar *functionURI;
0345
0346
0347 xmlXPathFuncLookupFunc funcLookupFunc;
0348 void *funcLookupData;
0349
0350
0351 xmlNsPtr *tmpNsList;
0352 int tmpNsNr;
0353
0354
0355 void *userData;
0356 xmlStructuredErrorFunc error;
0357 xmlError lastError;
0358 xmlNodePtr debugNode;
0359
0360
0361 xmlDictPtr dict;
0362
0363 int flags;
0364
0365
0366 void *cache;
0367
0368
0369 unsigned long opLimit;
0370 unsigned long opCount;
0371 int depth;
0372 };
0373
0374
0375
0376
0377
0378 typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
0379 typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
0380
0381
0382
0383
0384
0385
0386
0387 struct _xmlXPathParserContext {
0388 const xmlChar *cur;
0389 const xmlChar *base;
0390
0391 int error;
0392
0393 xmlXPathContextPtr context;
0394 xmlXPathObjectPtr value;
0395 int valueNr;
0396 int valueMax;
0397 xmlXPathObjectPtr *valueTab;
0398
0399 xmlXPathCompExprPtr comp;
0400 int xptr;
0401 xmlNodePtr ancestor;
0402
0403 int valueFrame;
0404 };
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416 XMLPUBVAR double xmlXPathNAN;
0417 XMLPUBVAR double xmlXPathPINF;
0418 XMLPUBVAR double xmlXPathNINF;
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429 #define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440 #define xmlXPathNodeSetItem(ns, index) \
0441 ((((ns) != NULL) && \
0442 ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
0443 (ns)->nodeTab[(index)] \
0444 : NULL)
0445
0446
0447
0448
0449
0450
0451
0452
0453 #define xmlXPathNodeSetIsEmpty(ns) \
0454 (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
0455
0456
0457 XMLPUBFUN void
0458 xmlXPathFreeObject (xmlXPathObjectPtr obj);
0459 XMLPUBFUN xmlNodeSetPtr
0460 xmlXPathNodeSetCreate (xmlNodePtr val);
0461 XMLPUBFUN void
0462 xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
0463 XMLPUBFUN void
0464 xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
0465 XMLPUBFUN xmlXPathObjectPtr
0466 xmlXPathObjectCopy (xmlXPathObjectPtr val);
0467 XMLPUBFUN int
0468 xmlXPathCmpNodes (xmlNodePtr node1,
0469 xmlNodePtr node2);
0470
0471
0472
0473 XMLPUBFUN int
0474 xmlXPathCastNumberToBoolean (double val);
0475 XMLPUBFUN int
0476 xmlXPathCastStringToBoolean (const xmlChar * val);
0477 XMLPUBFUN int
0478 xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
0479 XMLPUBFUN int
0480 xmlXPathCastToBoolean (xmlXPathObjectPtr val);
0481
0482 XMLPUBFUN double
0483 xmlXPathCastBooleanToNumber (int val);
0484 XMLPUBFUN double
0485 xmlXPathCastStringToNumber (const xmlChar * val);
0486 XMLPUBFUN double
0487 xmlXPathCastNodeToNumber (xmlNodePtr node);
0488 XMLPUBFUN double
0489 xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
0490 XMLPUBFUN double
0491 xmlXPathCastToNumber (xmlXPathObjectPtr val);
0492
0493 XMLPUBFUN xmlChar *
0494 xmlXPathCastBooleanToString (int val);
0495 XMLPUBFUN xmlChar *
0496 xmlXPathCastNumberToString (double val);
0497 XMLPUBFUN xmlChar *
0498 xmlXPathCastNodeToString (xmlNodePtr node);
0499 XMLPUBFUN xmlChar *
0500 xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
0501 XMLPUBFUN xmlChar *
0502 xmlXPathCastToString (xmlXPathObjectPtr val);
0503
0504 XMLPUBFUN xmlXPathObjectPtr
0505 xmlXPathConvertBoolean (xmlXPathObjectPtr val);
0506 XMLPUBFUN xmlXPathObjectPtr
0507 xmlXPathConvertNumber (xmlXPathObjectPtr val);
0508 XMLPUBFUN xmlXPathObjectPtr
0509 xmlXPathConvertString (xmlXPathObjectPtr val);
0510
0511
0512
0513
0514 XMLPUBFUN xmlXPathContextPtr
0515 xmlXPathNewContext (xmlDocPtr doc);
0516 XMLPUBFUN void
0517 xmlXPathFreeContext (xmlXPathContextPtr ctxt);
0518 XMLPUBFUN void
0519 xmlXPathSetErrorHandler(xmlXPathContextPtr ctxt,
0520 xmlStructuredErrorFunc handler,
0521 void *context);
0522 XMLPUBFUN int
0523 xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
0524 int active,
0525 int value,
0526 int options);
0527
0528
0529
0530 XMLPUBFUN long
0531 xmlXPathOrderDocElems (xmlDocPtr doc);
0532 XMLPUBFUN int
0533 xmlXPathSetContextNode (xmlNodePtr node,
0534 xmlXPathContextPtr ctx);
0535 XMLPUBFUN xmlXPathObjectPtr
0536 xmlXPathNodeEval (xmlNodePtr node,
0537 const xmlChar *str,
0538 xmlXPathContextPtr ctx);
0539 XMLPUBFUN xmlXPathObjectPtr
0540 xmlXPathEval (const xmlChar *str,
0541 xmlXPathContextPtr ctx);
0542 XMLPUBFUN xmlXPathObjectPtr
0543 xmlXPathEvalExpression (const xmlChar *str,
0544 xmlXPathContextPtr ctxt);
0545 XMLPUBFUN int
0546 xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
0547 xmlXPathObjectPtr res);
0548
0549
0550
0551 XMLPUBFUN xmlXPathCompExprPtr
0552 xmlXPathCompile (const xmlChar *str);
0553 XMLPUBFUN xmlXPathCompExprPtr
0554 xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
0555 const xmlChar *str);
0556 XMLPUBFUN xmlXPathObjectPtr
0557 xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
0558 xmlXPathContextPtr ctx);
0559 XMLPUBFUN int
0560 xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
0561 xmlXPathContextPtr ctxt);
0562 XMLPUBFUN void
0563 xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
0564 #endif
0565 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
0566 XML_DEPRECATED
0567 XMLPUBFUN void
0568 xmlXPathInit (void);
0569 XMLPUBFUN int
0570 xmlXPathIsNaN (double val);
0571 XMLPUBFUN int
0572 xmlXPathIsInf (double val);
0573
0574 #ifdef __cplusplus
0575 }
0576 #endif
0577
0578 #endif
0579 #endif