| Gnome XML Library Reference Manual |
|---|
xpath —
struct xmlXPathContext; typedef xmlXPathContextPtr; struct xmlXPathParserContext; typedef xmlXPathParserContextPtr; enum xmlXPathError; struct xmlNodeSet; typedef xmlNodeSetPtr; enum xmlXPathObjectType; struct xmlXPathObject; typedef xmlXPathObjectPtr; int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type); struct xmlXPathType; typedef xmlXPathTypePtr; struct xmlXPathVariable; typedef xmlXPathVariablePtr; void (*xmlXPathEvalFunc) (xmlXPathParserContextPtr ctxt, int nargs); struct xmlXPathFunct; typedef xmlXPathFuncPtr; xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr cur); struct xmlXPathAxis; typedef xmlXPathAxisPtr; struct xmlXPathCompExpr; typedef xmlXPathCompExprPtr; void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs); extern double xmlXPathNAN; extern double xmlXPathPINF; extern double xmlXPathNINF; #define xmlXPathNodeSetGetLength (ns) #define xmlXPathNodeSetItem (ns, index) #define xmlXPathNodeSetIsEmpty (ns)
struct xmlXPathContext {
xmlDocPtr doc; /* The current document */
xmlNodePtr node; /* The current node */
int nb_variables_unused; /* unused (hash table) */
int max_variables_unused; /* unused (hash table) */
xmlHashTablePtr varHash; /* Hash table of defined variables */
int nb_types; /* number of defined types */
int max_types; /* max number of types */
xmlXPathTypePtr types; /* Array of defined types */
int nb_funcs_unused; /* unused (hash table) */
int max_funcs_unused; /* unused (hash table) */
xmlHashTablePtr funcHash; /* Hash table of defined funcs */
int nb_axis; /* number of defined axis */
int max_axis; /* max number of axis */
xmlXPathAxisPtr axis; /* Array of defined axis */
/* the namespace nodes of the context node */
xmlNsPtr *namespaces; /* Array of namespaces */
int nsNr; /* number of namespace in scope */
void *user; /* function to free */
/* extra variables */
int contextSize; /* the context size */
int proximityPosition; /* the proximity position */
/* extra stuff for XPointer */
int xptr; /* it this an XPointer context */
xmlNodePtr here; /* for here() */
xmlNodePtr origin; /* for origin() */
/* the set of namespace declarations in scope for the expression */
xmlHashTablePtr nsHash; /* The namespaces hash table */
void *varLookupFunc; /* variable lookup func */
void *varLookupData; /* variable lookup data */
/* Possibility to link in an extra item */
void *extra; /* needed for XSLT */
/* The function name and URI when calling a function */
const xmlChar *function;
const xmlChar *functionURI;
/* function lookup function and data */
void *funcLookupFunc; /* function lookup func */
void *funcLookupData; /* function lookup data */
/* temporary namespace lists kept for walking the namespace axis */
xmlNsPtr *tmpNsList; /* Array of namespaces */
int tmpNsNr; /* number of namespace in scope */
/* error reporting mechanism */
void *userData; /* user specific data block */
xmlStructuredErrorFunc error; /* the callback in case of errors */
xmlError lastError; /* the last error */
xmlNodePtr debugNode; /* the source node XSLT */
};
Expression evaluation occurs with respect to a context. he context consists of: - a node (the context node) - a node list (the context node list) - a set of variable bindings - a function library - the set of namespace declarations in scope for the expression Following the switch to hash tables, this need to be trimmed up at the next binary incompatible release.
struct xmlXPathParserContext {
const xmlChar *cur; /* the current char being parsed */
const xmlChar *base; /* the full expression */
int error; /* error code */
xmlXPathContextPtr context; /* the evaluation context */
xmlXPathObjectPtr value; /* the current value */
int valueNr; /* number of values stacked */
int valueMax; /* max number of values stacked */
xmlXPathObjectPtr *valueTab; /* stack of values */
xmlXPathCompExprPtr comp; /* the precompiled expression */
int xptr; /* it this an XPointer expression */
xmlNodePtr ancestor; /* used for walking preceding axis */
};
An XPath parser context. It contains pure parsing informations, an xmlXPathContext, and the stack of objects.
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;
struct xmlNodeSet {
int nodeNr; /* number of nodes in the set */
int nodeMax; /* size of the array as allocated */
xmlNodePtr *nodeTab; /* array of nodes in no particular order */
/* @@ with_ns to check wether namespace nodes should be looked at @@ */
};
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 /* An XSLT value tree, non modifiable */
} xmlXPathObjectType;
struct xmlXPathObject {
xmlXPathObjectType type;
xmlNodeSetPtr nodesetval;
int boolval;
double floatval;
xmlChar *stringval;
void *user;
int index;
void *user2;
int index2;
};
int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
A conversion function is associated to a type and used to cast the new type to primitive values.
| obj: | an XPath object |
| type: | the number of the target type |
| Returns : | -1 in case of error, 0 otherwise |
struct xmlXPathType {
const xmlChar *name; /* the type name */
xmlXPathConvertFunc func; /* the conversion function */
};
struct xmlXPathVariable {
const xmlChar *name; /* the variable name */
xmlXPathObjectPtr value; /* the value */
};
void (*xmlXPathEvalFunc) (xmlXPathParserContextPtr ctxt, int nargs);
An XPath evaluation function, the parameters are on the XPath context stack.
| ctxt: | an XPath parser context |
| nargs: | the number of arguments passed to the function |
struct xmlXPathFunct {
const xmlChar *name; /* the function name */
xmlXPathEvalFunc func; /* the evaluation function */
};
xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr cur);
An axis traversal function. To traverse an axis, the engine calls the first time with cur == NULL and repeat until the function returns NULL indicating the end of the axis traversal.
| ctxt: | the XPath interpreter context |
| cur: | the previous node being explored on that axis |
| Returns : | the next node in that axis or NULL if at the end of the axis. |
struct xmlXPathAxis {
const xmlChar *name; /* the axis name */
xmlXPathAxisFunc func; /* the search function */
};
void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack.
| ctxt: | the XPath interprestation context |
| nargs: | the number of arguments |
#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
Implement a functionality similar to the DOM NodeList.length.
| ns: | a node-set |
#define xmlXPathNodeSetItem(ns, index)
Implements a functionality similar to the DOM NodeList.
| ns: | a node-set |
| index: | index of a node in the set |
| << xmlIO | chvalid >> |