williamr@4: /* williamr@4: * Summary: XML Path Language implementation williamr@4: * Description: API for the XML Path Language implementation williamr@4: * williamr@4: * XML Path Language implementation williamr@4: * XPath is a language for addressing parts of an XML document, williamr@4: * designed to be used by both XSLT and XPointer williamr@4: * http://www.w3.org/TR/xpath williamr@4: * williamr@4: * Implements williamr@4: * W3C Recommendation 16 November 1999 williamr@4: * http://www.w3.org/TR/1999/REC-xpath-19991116 williamr@4: * williamr@4: * Copy: See Copyright for the status of this software. williamr@4: * williamr@4: * Author: Daniel Veillard williamr@4: * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: */ williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef XML_XPATH_H williamr@4: #define XML_XPATH_H williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: williamr@4: typedef struct _xmlXPathContext xmlXPathContext; williamr@4: typedef xmlXPathContext *xmlXPathContextPtr; williamr@4: typedef struct _xmlXPathParserContext xmlXPathParserContext; williamr@4: typedef xmlXPathParserContext *xmlXPathParserContextPtr; williamr@4: williamr@4: /** williamr@4: * The set of XPath error codes. williamr@4: */ williamr@4: typedef enum { williamr@4: XPATH_EXPRESSION_OK = 0, williamr@4: XPATH_NUMBER_ERROR, williamr@4: XPATH_UNFINISHED_LITERAL_ERROR, williamr@4: XPATH_START_LITERAL_ERROR, williamr@4: XPATH_VARIABLE_REF_ERROR, williamr@4: XPATH_UNDEF_VARIABLE_ERROR, williamr@4: XPATH_INVALID_PREDICATE_ERROR, williamr@4: XPATH_EXPR_ERROR, williamr@4: XPATH_UNCLOSED_ERROR, williamr@4: XPATH_UNKNOWN_FUNC_ERROR, williamr@4: XPATH_INVALID_OPERAND, williamr@4: XPATH_INVALID_TYPE, williamr@4: XPATH_INVALID_ARITY, williamr@4: XPATH_INVALID_CTXT_SIZE, williamr@4: XPATH_INVALID_CTXT_POSITION, williamr@4: XPATH_MEMORY_ERROR, williamr@4: XPTR_SYNTAX_ERROR, williamr@4: XPTR_RESOURCE_ERROR, williamr@4: XPTR_SUB_RESOURCE_ERROR, williamr@4: XPATH_UNDEF_PREFIX_ERROR, williamr@4: XPATH_ENCODING_ERROR, williamr@4: XPATH_INVALID_CHAR_ERROR, williamr@4: XPATH_XE_EXTENSION_FUNC_ERROR williamr@4: } xmlXPathError; williamr@4: williamr@4: /* williamr@4: * A node-set (an unordered collection of nodes without duplicates). williamr@4: */ williamr@4: typedef struct _xmlNodeSet xmlNodeSet; williamr@4: typedef xmlNodeSet *xmlNodeSetPtr; williamr@4: struct _xmlNodeSet { williamr@4: int nodeNr; /* number of nodes in the set */ williamr@4: int nodeMax; /* size of the array as allocated */ williamr@4: xmlNodePtr* nodeTab; /* array of nodes in no particular order */ williamr@4: /* @@ with_ns to check wether namespace nodes should be looked at @@ */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: * An expression is evaluated to yield an object, which williamr@4: * has one of the following four basic types: williamr@4: * - node-set williamr@4: * - boolean williamr@4: * - number williamr@4: * - string williamr@4: * williamr@4: * @@ XPointer will add more types ! williamr@4: */ williamr@4: williamr@4: typedef enum { williamr@4: XPATH_UNDEFINED = 0, williamr@4: XPATH_NODESET = 1, williamr@4: XPATH_BOOLEAN = 2, williamr@4: XPATH_NUMBER = 3, williamr@4: XPATH_STRING = 4, williamr@4: XPATH_POINT = 5, williamr@4: XPATH_RANGE = 6, williamr@4: XPATH_LOCATIONSET = 7, williamr@4: XPATH_USERS = 8, williamr@4: XPATH_XSLT_TREE = 9 /* An XSLT value tree, non modifiable */ williamr@4: } xmlXPathObjectType; williamr@4: williamr@4: typedef struct _xmlXPathObject xmlXPathObject; williamr@4: typedef xmlXPathObject *xmlXPathObjectPtr; williamr@4: struct _xmlXPathObject { williamr@4: xmlXPathObjectType type; williamr@4: xmlNodeSetPtr nodesetval; williamr@4: int boolval; williamr@4: double floatval; williamr@4: xmlChar* stringval; williamr@4: void* user; williamr@4: int index; williamr@4: void* user2; williamr@4: int index2; williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlXPathConvertFunc: williamr@4: * @param obj an XPath object williamr@4: * @param type the number of the target type williamr@4: * williamr@4: * A conversion function is associated to a type and used to cast williamr@4: * the new type to primitive values. williamr@4: * williamr@4: * Returns -1 in case of error, 0 otherwise williamr@4: */ williamr@4: typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type); williamr@4: williamr@4: /* williamr@4: * Extra type: a name and a conversion function. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlXPathType xmlXPathType; williamr@4: typedef xmlXPathType *xmlXPathTypePtr; williamr@4: struct _xmlXPathType { williamr@4: const xmlChar *name; /* the type name */ williamr@4: xmlXPathConvertFunc func; /* the conversion function */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: * Extra variable: a name and a value. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlXPathVariable xmlXPathVariable; williamr@4: typedef xmlXPathVariable *xmlXPathVariablePtr; williamr@4: struct _xmlXPathVariable { williamr@4: const xmlChar *name; /* the variable name */ williamr@4: xmlXPathObjectPtr value; /* the value */ williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlXPathEvalFunc: williamr@4: * @param ctxt an XPath parser context williamr@4: * @param nargs the number of arguments passed to the function williamr@4: * williamr@4: * An XPath evaluation function, the parameters are on the XPath context stack. williamr@4: */ williamr@4: williamr@4: typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt, int nargs); williamr@4: williamr@4: /* williamr@4: * Extra function: a name and a evaluation function. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlXPathFunct xmlXPathFunct; williamr@4: typedef xmlXPathFunct *xmlXPathFuncPtr; williamr@4: struct _xmlXPathFunct { williamr@4: const xmlChar *name; /* the function name */ williamr@4: xmlXPathEvalFunc func; /* the evaluation function */ williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlXPathAxisFunc: williamr@4: * @param ctxt the XPath interpreter context williamr@4: * @param cur the previous node being explored on that axis williamr@4: * williamr@4: * An axis traversal function. To traverse an axis, the engine calls williamr@4: * the first time with cur == NULL and repeat until the function returns williamr@4: * NULL indicating the end of the axis traversal. williamr@4: * williamr@4: * Returns the next node in that axis or NULL if at the end of the axis. williamr@4: */ williamr@4: williamr@4: typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr cur); williamr@4: williamr@4: /* williamr@4: * Extra axis: a name and an axis function. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlXPathAxis xmlXPathAxis; williamr@4: typedef xmlXPathAxis* xmlXPathAxisPtr; williamr@4: struct _xmlXPathAxis { williamr@4: const xmlChar* name; /* the axis name */ williamr@4: xmlXPathAxisFunc func; /* the search function */ williamr@4: }; williamr@4: williamr@4: // XMLENGINE: NEW CODE -- XForms extensions support williamr@4: /** williamr@4: Callback for resolving prefix names into namespace URIs williamr@4: williamr@4: @return Namespace URI for aNs prefix. williamr@4: williamr@4: Resolving is made with aCtxt context. williamr@4: williamr@4: This function is used internally by for implementation of williamr@4: namespace-resovling feature in XPath API of XML Engine williamr@4: (MXmlEngNamespaceResolver interface is called by libxml2) williamr@4: */ williamr@4: typedef const xmlChar* (*xeXPathNsResolverFunc)(void* aCtxt, const xmlChar* aNs); williamr@4: //--- williamr@4: williamr@4: /** williamr@4: * xmlXPathContext: williamr@4: * williamr@4: * Expression evaluation occurs with respect to a context. williamr@4: * the context consists of: williamr@4: * - a node (the context node) williamr@4: * - a node list (the context node list) williamr@4: * - a set of variable bindings williamr@4: * - a function library williamr@4: * - the set of namespace declarations in scope for the expression williamr@4: * Following the switch to hash tables, this need to be trimmed up at williamr@4: * the next binary incompatible release. williamr@4: */ williamr@4: struct _xmlXPathContext { williamr@4: xmlDocPtr doc; /* The current document */ williamr@4: xmlNodePtr node; /* The current node */ williamr@4: williamr@4: //int nb_variables_unused; /* unused (hash table) */ williamr@4: //int max_variables_unused; /* unused (hash table) */ williamr@4: xmlHashTablePtr varHash; /* Hash table of defined variables */ williamr@4: williamr@4: int nb_types; /* number of defined types */ williamr@4: int max_types; /* max number of types */ williamr@4: xmlXPathTypePtr types; /* Array of defined types */ williamr@4: williamr@4: //int nb_funcs_unused; /* unused (hash table) */ williamr@4: //int max_funcs_unused; /* unused (hash table) */ williamr@4: xmlHashTablePtr funcHash; /* Hash table of defined funcs */ williamr@4: williamr@4: int nb_axis; /* number of defined axis */ williamr@4: int max_axis; /* max number of axis */ williamr@4: xmlXPathAxisPtr axis; /* Array of defined axis */ williamr@4: williamr@4: /* the namespace nodes of the context node */ williamr@4: xmlNsPtr *namespaces; /* Array of namespaces */ williamr@4: int nsNr; /* number of namespace in scope */ williamr@4: void *user; /* function to free */ williamr@4: williamr@4: /* extra variables */ williamr@4: int contextSize; /* the context size */ williamr@4: int proximityPosition; /* the proximity position */ williamr@4: williamr@4: /* extra stuff for XPointer */ williamr@4: int xptr; /* it this an XPointer context */ williamr@4: xmlNodePtr here; /* for here() */ williamr@4: xmlNodePtr origin; /* for origin() */ williamr@4: williamr@4: /* the set of namespace declarations in scope for the expression */ williamr@4: xmlHashTablePtr nsHash; /* The namespaces hash table */ williamr@4: void* varLookupFunc; /* variable lookup func */ williamr@4: void* varLookupData; /* variable lookup data */ williamr@4: williamr@4: /* Possibility to link in an extra item */ williamr@4: void* extra; /* needed for XSLT */ williamr@4: williamr@4: /* The function name and URI when calling a function */ williamr@4: const xmlChar* function; williamr@4: const xmlChar* functionURI; williamr@4: williamr@4: /* function lookup function and data */ williamr@4: void* funcLookupFunc; /* function lookup func */ williamr@4: void* funcLookupData; /* function lookup data */ williamr@4: williamr@4: /* temporary namespace lists kept for walking the namespace axis */ williamr@4: xmlNsPtr* tmpNsList; /* Array of namespaces */ williamr@4: int tmpNsNr; /* number of namespace in scope */ williamr@4: williamr@4: /* error reporting mechanism */ williamr@4: void* userData; /* user specific data block */ williamr@4: xmlStructuredErrorFunc error; /* the callback in case of errors */ williamr@4: xmlError lastError; /* the last error */ williamr@4: xmlNodePtr debugNode; /* the source node XSLT */ williamr@4: williamr@4: /* dictionnary */ williamr@4: xmlDictPtr dict; /* dictionnary if any */ williamr@4: williamr@4: // XMLENGINE: NEW CODE -- XForms extensions support williamr@4: xmlHashTablePtr instanceDocs; /* hash table that stores instance XForms instance docs, williamr@4: not owned by the structure, will be freed by the client*/ williamr@4: xmlNodeSetPtr dependencyList;/* nodes that the expression depends on */ williamr@4: xeXPathNsResolverFunc xeResolveNs; /* find namespace URI bound to prefix in the current context */ williamr@4: void* xeResolveNsCtxt; /* resolver-specific context for processing */ williamr@4: // END NEW CODE williamr@4: williamr@4: }; williamr@4: williamr@4: /* williamr@4: * The structure of a compiled expression form has become public in XML ENGINE williamr@4: */ williamr@4: williamr@4: typedef enum { williamr@4: XPATH_OP_END=0, williamr@4: XPATH_OP_AND, williamr@4: XPATH_OP_OR, williamr@4: XPATH_OP_EQUAL, williamr@4: XPATH_OP_CMP, williamr@4: XPATH_OP_PLUS, williamr@4: XPATH_OP_MULT, williamr@4: XPATH_OP_UNION, williamr@4: XPATH_OP_ROOT, williamr@4: XPATH_OP_NODE, williamr@4: XPATH_OP_RESET, williamr@4: XPATH_OP_COLLECT, williamr@4: XPATH_OP_VALUE, williamr@4: XPATH_OP_VARIABLE, williamr@4: XPATH_OP_FUNCTION, williamr@4: XPATH_OP_ARG, williamr@4: XPATH_OP_PREDICATE, williamr@4: XPATH_OP_FILTER, williamr@4: XPATH_OP_SORT williamr@4: #ifdef LIBXML_XPTR_ENABLED williamr@4: ,XPATH_OP_RANGETO williamr@4: #endif williamr@4: } xmlXPathOp; williamr@4: williamr@4: typedef struct _xmlXPathStepOp xmlXPathStepOp; williamr@4: typedef xmlXPathStepOp *xmlXPathStepOpPtr; williamr@4: struct _xmlXPathStepOp { williamr@4: xmlXPathOp op; /* The identifier of the operation */ williamr@4: int ch1; /* First child */ williamr@4: int ch2; /* Second child */ williamr@4: int value; williamr@4: int value2; williamr@4: int value3; williamr@4: void* value4; williamr@4: void* value5; williamr@4: void* cache; williamr@4: void* cacheURI; williamr@4: }; williamr@4: williamr@4: williamr@4: /** williamr@4: The initial size of 'steps' table in the precompiled XPath exression williamr@4: williamr@4: Double-it policy for growth is used in the code williamr@4: */ williamr@4: #define XPATH_STEPS_GRANULARITY 10 williamr@4: williamr@4: typedef struct _xmlXPathCompExpr xmlXPathCompExpr; williamr@4: typedef xmlXPathCompExpr* xmlXPathCompExprPtr; williamr@4: struct _xmlXPathCompExpr { williamr@4: int nbStep; /* Number of steps in this expression */ williamr@4: int maxStep; /* Maximum number of steps allocated */ williamr@4: xmlXPathStepOp* steps; /* ops for computation of this expression */ williamr@4: int last; /* index of last step in expression */ williamr@4: xmlChar* expr; /* the expression being computed */ williamr@4: xmlDictPtr dict; /* the dictionnary to use if any */ williamr@4: #ifdef DEBUG_EVAL_COUNTS williamr@4: int nb; williamr@4: xmlChar* string; williamr@4: #endif williamr@4: //XMLENGINE: NEW CODE williamr@4: void* extendedContext; /* some data set by API users and available for XPath extension functions */ williamr@4: void* xeNsResolver; /* default namespace resolver supplied when compiling expression */ williamr@4: //XMLENGINE: END NEW CODE williamr@4: }; williamr@4: /** williamr@4: * xmlXPathParserContext: williamr@4: * williamr@4: * An XPath parser context. It contains pure parsing informations, williamr@4: * an xmlXPathContext, and the stack of objects. williamr@4: */ williamr@4: struct _xmlXPathParserContext { williamr@4: const xmlChar *cur; /* the current char being parsed */ williamr@4: const xmlChar *base; /* the full expression */ williamr@4: williamr@4: int error; /* error code */ williamr@4: williamr@4: xmlXPathContextPtr context; /* the evaluation context */ williamr@4: xmlXPathObjectPtr value; /* the current value */ williamr@4: int valueNr; /* number of values stacked */ williamr@4: int valueMax; /* max number of values stacked */ williamr@4: xmlXPathObjectPtr *valueTab; /* stack of values */ williamr@4: williamr@4: xmlXPathCompExprPtr comp; /* the precompiled expression */ williamr@4: int xptr; /* it this an XPointer expression */ williamr@4: xmlNodePtr ancestor; /* used for walking preceding axis */ williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlXPathFunction: williamr@4: * @param ctxt the XPath interprestation context williamr@4: * @param nargs the number of arguments williamr@4: * williamr@4: * An XPath function. williamr@4: * The arguments (if any) are popped out from the context stack williamr@4: * and the result is pushed on the stack. williamr@4: */ williamr@4: williamr@4: typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs); williamr@4: williamr@4: /************************************************************************ williamr@4: * * williamr@4: * Public API * williamr@4: * * williamr@4: ************************************************************************/ williamr@4: williamr@4: /* williamr@4: NOTE: Now defined as local inline functions in xpath.c williamr@4: It seems that no one uses them from outside.. williamr@4: --> used by libxslt williamr@4: */ williamr@4: williamr@4: #define xmlXPathIsNaN(val) trio_isnan(val) williamr@4: #define xmlXPathIsInf(val) trio_isinf(val) williamr@4: williamr@4: williamr@4: /* These macros may later turn into functions */ williamr@4: /** williamr@4: * xmlXPathNodeSetGetLength: williamr@4: * @param ns a node-set williamr@4: * williamr@4: * Implements a functionality similar to the DOM NodeList.length. williamr@4: * williamr@4: * Returns the number of nodes in the node-set. williamr@4: */ williamr@4: #define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0) williamr@4: /** williamr@4: * xmlXPathNodeSetItem: williamr@4: * @param ns a node-set williamr@4: * @param index index of a node in the set williamr@4: * williamr@4: * Implements a functionality similar to the DOM NodeList.item(). williamr@4: * williamr@4: * Returns the xmlNodePtr at the given index in ns or NULL if williamr@4: * index is out of range (0 to length-1) williamr@4: */ williamr@4: #define xmlXPathNodeSetItem(ns, index) \ williamr@4: (( (ns) && ((index) >= 0) && ((index) < (ns)->nodeNr) ) \ williamr@4: ? (ns)->nodeTab[(index)] \ williamr@4: : NULL) williamr@4: /** williamr@4: * xmlXPathNodeSetIsEmpty: williamr@4: * @param ns a node-set williamr@4: * williamr@4: * Checks whether ns is empty or not. williamr@4: * williamr@4: * Returns %TRUE if ns is an empty node-set. williamr@4: */ williamr@4: #define xmlXPathNodeSetIsEmpty(ns) \ williamr@4: (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL)) williamr@4: williamr@4: williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlXPathFreeObject (xmlXPathObjectPtr obj); williamr@4: XMLPUBFUN xmlNodeSetPtr XMLCALL williamr@4: xmlXPathNodeSetCreate (xmlNodePtr val); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlXPathFreeNodeSet (xmlNodeSetPtr obj); williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathObjectCopy (xmlXPathObjectPtr val); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlXPathCmpNodes (xmlNodePtr node1, xmlNodePtr node2); williamr@4: /** williamr@4: * Conversion functions to basic types. williamr@4: */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlXPathCastNumberToBoolean (double val); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlXPathCastStringToBoolean (const xmlChar * val); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlXPathCastToBoolean (xmlXPathObjectPtr val); williamr@4: williamr@4: XMLPUBFUN double XMLCALL williamr@4: xmlXPathCastBooleanToNumber (int val); williamr@4: XMLPUBFUN double XMLCALL williamr@4: xmlXPathCastStringToNumber (const xmlChar * val); williamr@4: XMLPUBFUN double XMLCALL williamr@4: xmlXPathCastNodeToNumber (xmlNodePtr node); williamr@4: XMLPUBFUN double XMLCALL williamr@4: xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns); williamr@4: XMLPUBFUN double XMLCALL williamr@4: xmlXPathCastToNumber (xmlXPathObjectPtr val); williamr@4: williamr@4: XMLPUBFUN xmlChar* XMLCALL williamr@4: xmlXPathCastBooleanToString (int val); williamr@4: XMLPUBFUN xmlChar* XMLCALL williamr@4: xmlXPathCastNumberToString (double val); williamr@4: XMLPUBFUN xmlChar* XMLCALL williamr@4: xmlXPathCastNodeToString (xmlNodePtr node); williamr@4: XMLPUBFUN xmlChar* XMLCALL williamr@4: xmlXPathCastNodeSetToString (xmlNodeSetPtr ns); williamr@4: XMLPUBFUN xmlChar* XMLCALL williamr@4: xmlXPathCastToString (xmlXPathObjectPtr val); williamr@4: williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathConvertBoolean (xmlXPathObjectPtr val); williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathConvertNumber (xmlXPathObjectPtr val); williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathConvertString (xmlXPathObjectPtr val); williamr@4: williamr@4: /** williamr@4: * Context handling. williamr@4: */ williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlXPathInit (void); williamr@4: XMLPUBFUN xmlXPathContextPtr XMLCALL williamr@4: xmlXPathNewContext (xmlDocPtr doc); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlXPathFreeContext (xmlXPathContextPtr ctxt); williamr@4: williamr@4: /** williamr@4: * Evaluation functions. williamr@4: */ williamr@4: XMLPUBFUN long XMLCALL williamr@4: xmlXPathOrderDocElems (xmlDocPtr doc); williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathEval (const xmlChar *str, xmlXPathContextPtr ctx); williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathEvalExpression (const xmlChar *str, xmlXPathContextPtr ctxt); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlXPathEvalPredicate (xmlXPathContextPtr ctxt, xmlXPathObjectPtr res); williamr@4: /** williamr@4: * Separate compilation/evaluation entry points. williamr@4: */ williamr@4: XMLPUBFUN xmlXPathCompExprPtr XMLCALL williamr@4: xmlXPathCompile (const xmlChar *str); williamr@4: XMLPUBFUN xmlXPathCompExprPtr XMLCALL williamr@4: xmlXPathCtxtCompile (xmlXPathContextPtr ctxt, const xmlChar *str); williamr@4: XMLPUBFUN xmlXPathObjectPtr XMLCALL williamr@4: xmlXPathCompiledEval (xmlXPathCompExprPtr comp,xmlXPathContextPtr ctx); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp); williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: williamr@4: #endif /* XML_XPATH_H */ williamr@4: