#ifndef __XML_XPATH_H__
#define __XML_XPATH_H__
#include <libxml/tree.h>
#include <libxml/hash.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _xmlXPathContext xmlXPathContext;
typedef xmlXPathContext *xmlXPathContextPtr;
typedef struct _xmlXPathParserContext xmlXPathParserContext;
typedef xmlXPathParserContext *xmlXPathParserContextPtr;
typedef enum {
XPATH_EXPRESSION_OK = 0,
XPATH_NUMBER_ERROR,
XPATH_UNFINISHED_LITERAL_ERROR,
XPATH_START_LITERAL_ERROR,
XPATH_VARIABLE_REF_ERROR,
XPATH_UNDEF_VARIABLE_ERROR,
XPATH_INVALID_PREDICATE_ERROR,
XPATH_EXPR_ERROR,
XPATH_UNCLOSED_ERROR,
XPATH_UNKNOWN_FUNC_ERROR,
XPATH_INVALID_OPERAND,
XPATH_INVALID_TYPE,
XPATH_INVALID_ARITY,
XPATH_INVALID_CTXT_SIZE,
XPATH_INVALID_CTXT_POSITION,
XPATH_MEMORY_ERROR,
XPTR_SYNTAX_ERROR,
XPTR_RESOURCE_ERROR,
XPTR_SUB_RESOURCE_ERROR,
XPATH_UNDEF_PREFIX_ERROR,
XPATH_ENCODING_ERROR,
XPATH_INVALID_CHAR_ERROR
} xmlXPathError;
typedef struct _xmlNodeSet xmlNodeSet;
typedef xmlNodeSet *xmlNodeSetPtr;
struct _xmlNodeSet {
int nodeNr;
int nodeMax;
xmlNodePtr *nodeTab;
};
typedef enum {
XPATH_UNDEFINED = 0,
XPATH_NODESET = 1,
XPATH_BOOLEAN = 2,
XPATH_NUMBER = 3,
XPATH_STRING = 4,
XPATH_POINT = 5,
XPATH_RANGE = 6,
XPATH_LOCATIONSET = 7,
XPATH_USERS = 8,
XPATH_XSLT_TREE = 9
} xmlXPathObjectType;
typedef struct _xmlXPathObject xmlXPathObject;
typedef xmlXPathObject *xmlXPathObjectPtr;
struct _xmlXPathObject {
xmlXPathObjectType type;
xmlNodeSetPtr nodesetval;
int boolval;
double floatval;
xmlChar *stringval;
void *user;
int index;
void *user2;
int index2;
};
typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
typedef struct _xmlXPathType xmlXPathType;
typedef xmlXPathType *xmlXPathTypePtr;
struct _xmlXPathType {
const xmlChar *name;
xmlXPathConvertFunc func;
};
typedef struct _xmlXPathVariable xmlXPathVariable;
typedef xmlXPathVariable *xmlXPathVariablePtr;
struct _xmlXPathVariable {
const xmlChar *name;
xmlXPathObjectPtr value;
};
typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
int nargs);
typedef struct _xmlXPathFunct xmlXPathFunct;
typedef xmlXPathFunct *xmlXPathFuncPtr;
struct _xmlXPathFunct {
const xmlChar *name;
xmlXPathEvalFunc func;
};
typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
xmlXPathObjectPtr cur);
typedef struct _xmlXPathAxis xmlXPathAxis;
typedef xmlXPathAxis *xmlXPathAxisPtr;
struct _xmlXPathAxis {
const xmlChar *name;
xmlXPathAxisFunc func;
};
struct _xmlXPathContext {
xmlDocPtr doc;
xmlNodePtr node;
int nb_variables_unused;
int max_variables_unused;
xmlHashTablePtr varHash;
int nb_types;
int max_types;
xmlXPathTypePtr types;
int nb_funcs_unused;
int max_funcs_unused;
xmlHashTablePtr funcHash;
int nb_axis;
int max_axis;
xmlXPathAxisPtr axis;
xmlNsPtr *namespaces;
int nsNr;
void *user;
int contextSize;
int proximityPosition;
int xptr;
xmlNodePtr here;
xmlNodePtr origin;
xmlHashTablePtr nsHash;
void *varLookupFunc;
void *varLookupData;
void *extra;
const xmlChar *function;
const xmlChar *functionURI;
void *funcLookupFunc;
void *funcLookupData;
xmlNsPtr *tmpNsList;
int tmpNsNr;
};
typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
struct _xmlXPathParserContext {
const xmlChar *cur;
const xmlChar *base;
int error;
xmlXPathContextPtr context;
xmlXPathObjectPtr value;
int valueNr;
int valueMax;
xmlXPathObjectPtr *valueTab;
xmlXPathCompExprPtr comp;
int xptr;
xmlNodePtr ancestor;
};
typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
LIBXML_DLL_IMPORT extern double xmlXPathNAN;
LIBXML_DLL_IMPORT extern double xmlXPathPINF;
LIBXML_DLL_IMPORT extern double xmlXPathNINF;
int xmlXPathIsNaN (double val);
int xmlXPathIsInf (double val);
#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
#define xmlXPathNodeSetItem(ns, index) \
((((ns) != NULL) && \
((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
(ns)->nodeTab[(index)] \
: NULL)
#define xmlXPathNodeSetIsEmpty(ns) \
(((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
void xmlXPathFreeObject (xmlXPathObjectPtr obj);
xmlNodeSetPtr xmlXPathNodeSetCreate (xmlNodePtr val);
void xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
void xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
xmlXPathObjectPtr xmlXPathObjectCopy (xmlXPathObjectPtr val);
int xmlXPathCmpNodes (xmlNodePtr node1,
xmlNodePtr node2);
int xmlXPathCastNumberToBoolean (double val);
int xmlXPathCastStringToBoolean (const xmlChar * val);
int xmlXPathCastNodeSetToBoolean (xmlNodeSetPtr ns);
int xmlXPathCastToBoolean (xmlXPathObjectPtr val);
double xmlXPathCastBooleanToNumber (int val);
double xmlXPathCastStringToNumber (const xmlChar * val);
double xmlXPathCastNodeToNumber (xmlNodePtr node);
double xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
double xmlXPathCastToNumber (xmlXPathObjectPtr val);
xmlChar * xmlXPathCastBooleanToString (int val);
xmlChar * xmlXPathCastNumberToString (double val);
xmlChar * xmlXPathCastNodeToString (xmlNodePtr node);
xmlChar * xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
xmlChar * xmlXPathCastToString (xmlXPathObjectPtr val);
xmlXPathObjectPtr xmlXPathConvertBoolean (xmlXPathObjectPtr val);
xmlXPathObjectPtr xmlXPathConvertNumber (xmlXPathObjectPtr val);
xmlXPathObjectPtr xmlXPathConvertString (xmlXPathObjectPtr val);
void xmlXPathInit (void);
xmlXPathContextPtr xmlXPathNewContext (xmlDocPtr doc);
void xmlXPathFreeContext (xmlXPathContextPtr ctxt);
xmlXPathObjectPtr xmlXPathEval (const xmlChar *str,
xmlXPathContextPtr ctx);
xmlXPathObjectPtr xmlXPathEvalExpression (const xmlChar *str,
xmlXPathContextPtr ctxt);
int xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
xmlXPathObjectPtr res);
xmlXPathCompExprPtr xmlXPathCompile (const xmlChar *str);
xmlXPathObjectPtr xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
xmlXPathContextPtr ctx);
void xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
#ifdef __cplusplus
}
#endif
#endif