38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Summary: XML Path Language implementation
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Description: API for the XML Path Language implementation
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * XML Path Language implementation
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * XPath is a language for addressing parts of an XML document,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * designed to be used by both XSLT and XPointer
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Implements
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * W3C Recommendation 16 November 1999
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Copy: See Copyright for the status of this software.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Author: Daniel Veillard
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_XPATH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncextern "C" {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef struct _xmlXPathParserContext xmlXPathParserContext;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef xmlXPathParserContext *xmlXPathParserContextPtr;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * The set of XPath error codes.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef enum {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * A node-set (an unordered collection of nodes without duplicates).
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlNodePtr *nodeTab; /* array of nodes in no particular order */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* @@ with_ns to check wether namespace nodes should be looked at @@ */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An expression is evaluated to yield an object, which
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * has one of the following four basic types:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - node-set
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - boolean
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @@ XPointer will add more types !
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef enum {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync XPATH_XSLT_TREE = 9 /* An XSLT value tree, non modifiable */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathConvertFunc:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @obj: an XPath object
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @type: the number of the target type
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * A conversion function is associated to a type and used to cast
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * the new type to primitive values.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns -1 in case of error, 0 otherwise
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Extra type: a name and a conversion function.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathConvertFunc func; /* the conversion function */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Extra variable: a name and a value.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathEvalFunc:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: an XPath parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @nargs: the number of arguments passed to the function
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An XPath evaluation function, the parameters are on the XPath context stack.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Extra function: a name and a evaluation function.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathEvalFunc func; /* the evaluation function */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathAxisFunc:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: the XPath interpreter context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @cur: the previous node being explored on that axis
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An axis traversal function. To traverse an axis, the engine calls
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * the first time with cur == NULL and repeat until the function returns
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * NULL indicating the end of the axis traversal.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the next node in that axis or NULL if at the end of the axis.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Extra axis: a name and an axis function.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathFunction:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: the XPath interprestation context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @nargs: the number of arguments
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An XPath function.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * The arguments (if any) are popped out from the context stack
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * and the result is pushed on the stack.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Function and Variable Lookup.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathVariableLookupFunc:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: an XPath context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: name of the variable
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ns_uri: the namespace name hosting this variable
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Prototype for callbacks used to plug variable lookup in the XPath
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the XPath object value or NULL if not found.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathFuncLookupFunc:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: an XPath context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: name of the function
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ns_uri: the namespace name hosting this function
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Prototype for callbacks used to plug function lookup in the XPath
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the XPath function or NULL if not found.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynctypedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathFlags:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Flags for XPath engine compilation and runtime
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * XML_XPATH_CHECKNS:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * check namespaces at compilation
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * XML_XPATH_NOVAR:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * forbid variables in expression
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathContext:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Expression evaluation occurs with respect to a context.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * he context consists of:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - a node (the context node)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - a node list (the context node list)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - a set of variable bindings
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - a function library
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * - the set of namespace declarations in scope for the expression
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Following the switch to hash tables, this need to be trimmed up at
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * the next binary incompatible release.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int max_variables_unused; /* unused (hash table) */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlHashTablePtr varHash; /* Hash table of defined variables */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathTypePtr types; /* Array of defined types */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlHashTablePtr funcHash; /* Hash table of defined funcs */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* the namespace nodes of the context node */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* extra variables */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int proximityPosition; /* the proximity position */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* extra stuff for XPointer */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* the set of namespace declarations in scope for the expression */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlHashTablePtr nsHash; /* The namespaces hash table */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* Possibility to link in an extra item */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* The function name and URI when calling a function */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* function lookup function and data */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* temporary namespace lists kept for walking the namespace axis */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* error reporting mechanism */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlStructuredErrorFunc error; /* the callback in case of errors */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* dictionary */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* Cache for reusal of XPath objects */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * The structure of a compiled expression form is not public.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathParserContext:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An XPath parser context. It contains pure parsing informations,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * an xmlXPathContext, and the stack of objects.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *cur; /* the current char being parsed */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathContextPtr context; /* the evaluation context */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathCompExprPtr comp; /* the precompiled expression */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlNodePtr ancestor; /* used for walking preceding axis */
2ffab3589d8afc899993678567d1a7c339ac3f1avboxsync int valueFrame; /* used to limit Pop on the stack */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/************************************************************************
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Public API *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ************************************************************************/
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Objects and Nodesets handling
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/* These macros may later turn into functions */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathNodeSetGetLength:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ns: a node-set
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Implement a functionality similar to the DOM NodeList.length.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the number of nodes in the node-set.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathNodeSetItem:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ns: a node-set
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @index: index of a node in the set
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Implements a functionality similar to the DOM NodeList.item().
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the xmlNodePtr at the given @index in @ns or NULL if
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @index is out of range (0 to length-1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * xmlXPathNodeSetIsEmpty:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ns: a node-set
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Checks whether @ns is empty or not.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns %TRUE if @ns is an empty node-set.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Conversion functions to basic types.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Context handling.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Evaluation functions.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Separate compilation/evaluation entry points.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_XPATH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* ! __XML_XPATH_H__ */