19 #ifndef __XML_XPATH_H__
20 #define __XML_XPATH_H__
22 #include <libxml/xmlversion.h>
24 #ifdef LIBXML_XPATH_ENABLED
26 #include <libxml/xmlerror.h>
27 #include <libxml/tree.h>
28 #include <libxml/hash.h>
31 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
37 #ifdef LIBXML_XPATH_ENABLED
39 typedef struct _xmlXPathContext xmlXPathContext;
40 typedef xmlXPathContext *xmlXPathContextPtr;
41 typedef struct _xmlXPathParserContext xmlXPathParserContext;
42 typedef xmlXPathParserContext *xmlXPathParserContextPtr;
49 XPATH_EXPRESSION_OK = 0,
51 XPATH_UNFINISHED_LITERAL_ERROR,
52 XPATH_START_LITERAL_ERROR,
53 XPATH_VARIABLE_REF_ERROR,
54 XPATH_UNDEF_VARIABLE_ERROR,
55 XPATH_INVALID_PREDICATE_ERROR,
58 XPATH_UNKNOWN_FUNC_ERROR,
59 XPATH_INVALID_OPERAND,
62 XPATH_INVALID_CTXT_SIZE,
63 XPATH_INVALID_CTXT_POSITION,
67 XPTR_SUB_RESOURCE_ERROR,
68 XPATH_UNDEF_PREFIX_ERROR,
70 XPATH_INVALID_CHAR_ERROR,
77 typedef struct _xmlNodeSet xmlNodeSet;
78 typedef xmlNodeSet *xmlNodeSetPtr;
105 XPATH_LOCATIONSET = 7,
108 } xmlXPathObjectType;
110 typedef struct _xmlXPathObject xmlXPathObject;
111 typedef xmlXPathObject *xmlXPathObjectPtr;
112 struct _xmlXPathObject {
113 xmlXPathObjectType type;
114 xmlNodeSetPtr nodesetval;
134 typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj,
int type);
140 typedef struct _xmlXPathType xmlXPathType;
141 typedef xmlXPathType *xmlXPathTypePtr;
142 struct _xmlXPathType {
144 xmlXPathConvertFunc func;
151 typedef struct _xmlXPathVariable xmlXPathVariable;
152 typedef xmlXPathVariable *xmlXPathVariablePtr;
153 struct _xmlXPathVariable {
155 xmlXPathObjectPtr value;
166 typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
173 typedef struct _xmlXPathFunct xmlXPathFunct;
174 typedef xmlXPathFunct *xmlXPathFuncPtr;
175 struct _xmlXPathFunct {
177 xmlXPathEvalFunc func;
192 typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
193 xmlXPathObjectPtr cur);
199 typedef struct _xmlXPathAxis xmlXPathAxis;
200 typedef xmlXPathAxis *xmlXPathAxisPtr;
201 struct _xmlXPathAxis {
203 xmlXPathAxisFunc func;
216 typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt,
int nargs);
233 typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (
void *ctxt,
235 const xmlChar *ns_uri);
248 typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (
void *ctxt,
250 const xmlChar *ns_uri);
261 #define XML_XPATH_CHECKNS (1<<0)
267 #define XML_XPATH_NOVAR (1<<1)
286 struct _xmlXPathContext {
290 int nb_variables_unused;
291 int max_variables_unused;
292 xmlHashTablePtr varHash;
296 xmlXPathTypePtr types;
299 int max_funcs_unused;
300 xmlHashTablePtr funcHash;
304 xmlXPathAxisPtr axis;
307 xmlNsPtr *namespaces;
313 int proximityPosition;
321 xmlHashTablePtr nsHash;
322 xmlXPathVariableLookupFunc varLookupFunc;
329 const xmlChar *
function;
330 const xmlChar *functionURI;
333 xmlXPathFuncLookupFunc funcLookupFunc;
334 void *funcLookupData;
342 xmlStructuredErrorFunc error;
344 xmlNodePtr debugNode;
359 typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
360 typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
368 struct _xmlXPathParserContext {
374 xmlXPathContextPtr context;
375 xmlXPathObjectPtr value;
378 xmlXPathObjectPtr *valueTab;
380 xmlXPathCompExprPtr comp;
395 XMLPUBVAR
double xmlXPathNAN;
396 XMLPUBVAR
double xmlXPathPINF;
397 XMLPUBVAR
double xmlXPathNINF;
408 #define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
419 #define xmlXPathNodeSetItem(ns, index) \
420 ((((ns) != NULL) && \
421 ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
422 (ns)->nodeTab[(index)] \
432 #define xmlXPathNodeSetIsEmpty(ns) \
433 (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
436 XMLPUBFUN
void XMLCALL
437 xmlXPathFreeObject (xmlXPathObjectPtr obj);
438 XMLPUBFUN xmlNodeSetPtr XMLCALL
439 xmlXPathNodeSetCreate (xmlNodePtr val);
440 XMLPUBFUN
void XMLCALL
441 xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
442 XMLPUBFUN
void XMLCALL
443 xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
444 XMLPUBFUN xmlXPathObjectPtr XMLCALL
445 xmlXPathObjectCopy (xmlXPathObjectPtr val);
446 XMLPUBFUN
int XMLCALL
447 xmlXPathCmpNodes (xmlNodePtr node1,
452 XMLPUBFUN
int XMLCALL
453 xmlXPathCastNumberToBoolean (
double val);
454 XMLPUBFUN
int XMLCALL
455 xmlXPathCastStringToBoolean (
const xmlChar * val);
456 XMLPUBFUN
int XMLCALL
457 xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
458 XMLPUBFUN
int XMLCALL
459 xmlXPathCastToBoolean (xmlXPathObjectPtr val);
461 XMLPUBFUN
double XMLCALL
462 xmlXPathCastBooleanToNumber (
int val);
463 XMLPUBFUN
double XMLCALL
464 xmlXPathCastStringToNumber (
const xmlChar * val);
465 XMLPUBFUN
double XMLCALL
466 xmlXPathCastNodeToNumber (xmlNodePtr node);
467 XMLPUBFUN
double XMLCALL
468 xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
469 XMLPUBFUN
double XMLCALL
470 xmlXPathCastToNumber (xmlXPathObjectPtr val);
472 XMLPUBFUN xmlChar * XMLCALL
473 xmlXPathCastBooleanToString (
int val);
474 XMLPUBFUN xmlChar * XMLCALL
475 xmlXPathCastNumberToString (
double val);
476 XMLPUBFUN xmlChar * XMLCALL
477 xmlXPathCastNodeToString (xmlNodePtr node);
478 XMLPUBFUN xmlChar * XMLCALL
479 xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
480 XMLPUBFUN xmlChar * XMLCALL
481 xmlXPathCastToString (xmlXPathObjectPtr val);
483 XMLPUBFUN xmlXPathObjectPtr XMLCALL
484 xmlXPathConvertBoolean (xmlXPathObjectPtr val);
485 XMLPUBFUN xmlXPathObjectPtr XMLCALL
486 xmlXPathConvertNumber (xmlXPathObjectPtr val);
487 XMLPUBFUN xmlXPathObjectPtr XMLCALL
488 xmlXPathConvertString (xmlXPathObjectPtr val);
493 XMLPUBFUN xmlXPathContextPtr XMLCALL
494 xmlXPathNewContext (xmlDocPtr doc);
495 XMLPUBFUN
void XMLCALL
496 xmlXPathFreeContext (xmlXPathContextPtr ctxt);
497 XMLPUBFUN
int XMLCALL
498 xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
505 XMLPUBFUN
long XMLCALL
506 xmlXPathOrderDocElems (xmlDocPtr doc);
507 XMLPUBFUN xmlXPathObjectPtr XMLCALL
508 xmlXPathEval (
const xmlChar *str,
509 xmlXPathContextPtr ctx);
510 XMLPUBFUN xmlXPathObjectPtr XMLCALL
511 xmlXPathEvalExpression (
const xmlChar *str,
512 xmlXPathContextPtr ctxt);
513 XMLPUBFUN
int XMLCALL
514 xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
515 xmlXPathObjectPtr res);
519 XMLPUBFUN xmlXPathCompExprPtr XMLCALL
520 xmlXPathCompile (
const xmlChar *str);
521 XMLPUBFUN xmlXPathCompExprPtr XMLCALL
522 xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
524 XMLPUBFUN xmlXPathObjectPtr XMLCALL
525 xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
526 xmlXPathContextPtr ctx);
527 XMLPUBFUN
int XMLCALL
528 xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
529 xmlXPathContextPtr ctxt);
530 XMLPUBFUN
void XMLCALL
531 xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
533 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
534 XMLPUBFUN
void XMLCALL
536 XMLPUBFUN
int XMLCALL
537 xmlXPathIsNaN (
double val);
538 XMLPUBFUN
int XMLCALL
539 xmlXPathIsInf (
double val);