* Summary: XML Path Language implementation * Description: API for the XML Path Language implementation * * XML Path Language implementation * XPath is a language for addressing parts of an XML document, * designed to be used by both XSLT and XPointer * http://www.w3.org/TR/xpath * * Implements * W3C Recommendation 16 November 1999 * http://www.w3.org/TR/1999/REC-xpath-19991116 * * Copy: See Copyright for the status of this software. * * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A. /if not defined(XML_XPATH_H__) /define XML_XPATH_H__ /include "libxmlrpg/xmlversion" /if defined(LIBXML_XPATH_ENABLED) /include "libxmlrpg/xmlTypesC" /include "libxmlrpg/xmlerror" /include "libxmlrpg/tree" /include "libxmlrpg/hash" /endif LIBXML_XPATH_ENABLED /if defined(LIBXML_XPATH_ENABLED)
d xmlXPathContextPtr… d s * based(######typedef######)
d xmlXPathParserContextPtr… d s * based(######typedef######)
* The set of XPath error codes.
d xmlXPathError s based(######typedef######) d like(xmlCenum) d XPATH_EXPRESSION_OK… d c 0 d XPATH_NUMBER_ERROR… d c 1 d XPATH_UNFINISHED_LITERAL_ERROR… d c 2 d XPATH_START_LITERAL_ERROR… d c 3 d XPATH_VARIABLE_REF_ERROR… d c 4 d XPATH_UNDEF_VARIABLE_ERROR… d c 5 d XPATH_INVALID_PREDICATE_ERROR… d c 6 d XPATH_EXPR_ERROR… d c 7 d XPATH_UNCLOSED_ERROR… d c 8 d XPATH_UNKNOWN_FUNC_ERROR… d c 9 d XPATH_INVALID_OPERAND… d c 10 d XPATH_INVALID_TYPE… d c 11 d XPATH_INVALID_ARITY… d c 12 d XPATH_INVALID_CTXT_SIZE… d c 13 d XPATH_INVALID_CTXT_POSITION… d c 14 d XPATH_MEMORY_ERROR… d c 15 d XPTR_SYNTAX_ERROR… d c 16 d XPTR_RESOURCE_ERROR… d c 17 d XPTR_SUB_RESOURCE_ERROR… d c 18 d XPATH_UNDEF_PREFIX_ERROR… d c 19 d XPATH_ENCODING_ERROR… d c 20 d XPATH_INVALID_CHAR_ERROR… d c 21 d XPATH_INVALID_CTXT… d c 22 d XPATH_STACK_ERROR… d c 23 d XPATH_FORBID_VARIABLE_ERROR… d c 24
* A node-set (an unordered collection of nodes without duplicates).
d xmlNodeSetPtr s * based(######typedef######)
d xmlNodeSet ds based(xmlNodeSetPtr) d align qualified d nodeNr like(xmlCint) Set node count d nodeMax like(xmlCint) Max # nodes in set d nodeTab * xmlNodePtr *
* An expression is evaluated to yield an object, which * has one of the following four basic types: * - node-set * - boolean * - number * - string * * @@ XPointer will add more types !
d xmlXPathObjectType… d s based(######typedef######) d like(xmlCenum) d XPATH_UNDEFINED… d c 0 d XPATH_NODESET c 1 d XPATH_BOOLEAN c 2 d XPATH_NUMBER c 3 d XPATH_STRING c 4 d XPATH_POINT c 5 d XPATH_RANGE c 6 d XPATH_LOCATIONSET… d c 7 d XPATH_USERS c 8 d XPATH_XSLT_TREE… R/O XSLT value tree d c 9
d xmlXPathObjectPtr… d s * based(######typedef######)
d xmlXPathObject ds based(xmlXPathObjectPtr) d align qualified d type like(xmlXPathObjectType) d nodesetval like(xmlNodeSetPtr) d boolval like(xmlCint) d floatval like(xmlCdouble) d stringval * xmlChar * d user * void * d index like(xmlCint) d user2 * void * d index2 like(xmlCint)
* xmlXPathConvertFunc: * @obj: an XPath object * @type: the number of the target type * * A conversion function is associated to a type and used to cast * the new type to primitive values. * * Returns -1 in case of error, 0 otherwise
d xmlXPathConvertFunc… d s * based(######typedef######) d procptr
* Extra type: a name and a conversion function.
d xmlXPathTypePtr… d s * based(######typedef######)
d xmlXPathType ds based(xmlXPathTypePtr) d align qualified d name * The type name d func like(xmlXPathConvertFunc) Conversion function
* Extra variable: a name and a value.
d xmlXPathVariablePtr… d s * based(######typedef######)
d xmlXPathVariable… d ds based(xmlXPathVariablePtr) d align qualified d name * The variable name d value like(xmlXPathObjectPtr) The value
* xmlXPathEvalFunc: * @ctxt: an XPath parser context * @nargs: the number of arguments passed to the function * * An XPath evaluation function, the parameters are on the XPath * context stack.
d xmlXPathEvalFunc… d s * based(######typedef######) d procptr
* Extra function: a name and an evaluation function.
d xmlXPathFuncPtr… d s * based(######typedef######)
d xmlXPathFunct ds based(xmlXPathFuncPtr) d align qualified d name * The function name d func like(xmlXPathEvalFunc) Evaluation function
* xmlXPathAxisFunc: * @ctxt: the XPath interpreter context * @cur: the previous node being explored on that axis * * 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. * * Returns the next node in that axis or NULL if at the end of the axis.
d xmlXPathAxisFunc… d s * based(######typedef######) d procptr
* Extra axis: a name and an axis function.
d xmlXPathAxisPtr… d s * based(######typedef######)
d xmlXPathAxis ds based(xmlXPathAxisPtr) d align qualified d name * The axis name d func like(xmlXPathAxisFunc) The search function
* xmlXPathFunction: * @ctxt: the XPath interprestation context * @nargs: the number of arguments * * An XPath function. * The arguments (if any) are popped out from the context stack * and the result is pushed on the stack.
d xmlXPathFunction… d s * based(######typedef######) d procptr
* Function and Variable Lookup. * xmlXPathVariableLookupFunc: * @ctxt: an XPath context * @name: name of the variable * @ns_uri: the namespace name hosting this variable * * Prototype for callbacks used to plug variable lookup in the XPath * engine. * * Returns the XPath object value or NULL if not found.
d xmlXPathVariableLookupFunc… d s * based(######typedef######) d procptr
* xmlXPathFuncLookupFunc: * @ctxt: an XPath context * @name: name of the function * @ns_uri: the namespace name hosting this function * * Prototype for callbacks used to plug function lookup in the XPath * engine. * * Returns the XPath function or NULL if not found.
d xmlXPathFuncLookupFunc… d s * based(######typedef######) d procptr
* xmlXPathFlags: * Flags for XPath engine compilation and runtime * XML_XPATH_CHECKNS: * * check namespaces at compilation
d XML_XPATH_CHECKNS… d c X'0001'
* XML_XPATH_NOVAR: * * forbid variables in expression
d XML_XPATH_NOVAR… d c X'0002'
* xmlXPathContext: * * 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. * The node may be modified when the context is passed to libxml2 * for an XPath evaluation so you may need to initialize it again * before the next call.
d xmlXPathContext… d ds based(xmlXPathContextPtr) d align qualified d doc like(xmlDocPtr) Current document d node like(xmlNodePtr) Current node
*
d nb_variables_unused… Unused (hash table) d like(xmlCint) d max_variables_unused… Unused (hash table) d like(xmlCint) d varHash like(xmlHashTablePtr) Defined variables
*
d nb_types like(xmlCint) # of defined types d max_types like(xmlCint) Max number of types d types like(xmlXPathTypePtr) Defined types array
*
d nb_funcs_unused… Unused (hash table) d like(xmlCint) d max_funcs_unused… Unused (hash table) d like(xmlCint) d funcHash like(xmlHashTablePtr) Defined functions
*
d nb_axis like(xmlCint) # of defined axis d max_axis like(xmlCint) Max number of axis d axis like(xmlXPathAxisPtr) Defined axis array
* * the namespace nodes of the context node *
d namespaces * xmlNsPtr * d nsNr like(xmlCint) # scope namespaces d user * procptr Function to free
* * extra variables *
d contextSize like(xmlCint) The context size d proximityPosition… d like(xmlCint)
* * extra stuff for XPointer *
d xptr like(xmlCint) XPointer context ? d here like(xmlNodePtr) For here() d origin like(xmlNodePtr) For origin()
* * the set of namespace declarations in scope for the expression *
d nsHash like(xmlHashTablePtr) Namespace hashtable d varLookupFunc like(xmlXPathVariableLookupFunc) Var lookup function d varLookupData * void *
* * Possibility to link in an extra item *
d extra * void *
* * The function name and URI when calling a function *
d function * const xmlChar * d functionURI * const xmlChar *
* * function lookup function and data *
d funcLookupFunc… Func lookup func d like(xmlXPathVariableLookupFunc) d funcLookupData… void * d *
* * temporary namespace lists kept for walking the namespace axis *
d tmpNsList * xmlNsPtr * d tmpNsNr like(xmlCint) # scope namespaces
* * error reporting mechanism *
d userData * void * d error like(xmlStructuredErrorFunc) Error callback d lastError likeds(xmlError) The last error d debugNode like(xmlNodePtr) XSLT source node
* * dictionary *
d dict like(xmlDictPtr) Dictionary if any
*
d flags like(xmlCint) Compilation control
* * Cache for reusal of XPath objects *
d cache * void *
* The structure of a compiled expression form is not public.
d xmlXPathCompExprPtr… d s * based(######typedef######)
* xmlXPathParserContext: * * An XPath parser context. It contains pure parsing informations, * an xmlXPathContext, and the stack of objects.
d xmlXPathParserContext… d ds based(xmlXPathParserContextPtr) d align qualified d cur * const xmlChar * d base * const xmlChar *
*
d error like(xmlCint) Error code
*
d context like(xmlXPathContextPtr) Evaluation context d value like(xmlXPathObjectPtr) The current value d valueNr like(xmlCint) Value stack depth d valueMax like(xmlCint) Max stack depth d valueTab * xmlXPathObjectPtr *
*
d comp like(xmlXPathCompExprPtr) Precompiled expr. d xptr like(xmlCint) XPointer expression? d ancestor like(xmlNodePtr) To walk prec. axis
*
d valueFrame like(xmlCint) Limit stack pop
************************************************************************** * * * Public API * * * ************************************************************************** * Objects and Nodesets handling
d xmlXPathNAN s import('xmlXPathNAN') d like(xmlCdouble)
d xmlXPathPINF s import('xmlXPathPINF') d like(xmlCdouble)
d xmlXPathNINF s import('xmlXPathNINF') d like(xmlCdouble)
d xmlXPathFreeObject… d pr extproc('xmlXPathFreeObject') d obj value like(xmlXPathObjectPtr)
d xmlXPathNodeSetCreate… d pr extproc('xmlXPathNodeSetCreate') d like(xmlNodeSetPtr) d val value like(xmlNodePtr)
d xmlXPathFreeNodeSetList… d pr extproc('xmlXPathFreeNodeSetList') d obj value like(xmlXPathObjectPtr)
d xmlXPathFreeNodeSet… d pr extproc('xmlXPathFreeNodeSet') d obj value like(xmlNodeSetPtr)
d xmlXPathObjectCopy… d pr extproc('xmlXPathObjectCopy') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr)
d xmlXPathCmpNodes… d pr extproc('xmlXPathCmpNodes') d like(xmlCint) d node1 value like(xmlNodePtr) d node2 value like(xmlNodePtr)
* Conversion functions to basic types.
d xmlXPathCastNumberToBoolean… d pr extproc( d 'xmlXPathCastNumberToBoolean') d like(xmlCint) d val value like(xmlCdouble)
d xmlXPathCastStringToBoolean… d pr extproc( d 'xmlXPathCastStringToBoolean') d like(xmlCint) d val * value options(*string) const xmlChar *
d xmlXPathCastNodeSetToBoolean… d pr extproc( d 'xmlXPathCastNodeSetToBoolean') d like(xmlCint) d ns value like(xmlNodeSetPtr)
d xmlXPathCastToBoolean… d pr extproc('xmlXPathCastToBoolean') d like(xmlCint) d val value like(xmlXPathObjectPtr)
d xmlXPathCastBooleanToNumber… d pr extproc( d 'xmlXPathCastBooleanToNumber') d like(xmlCdouble) d val value like(xmlCint)
d xmlXPathCastStringToNumber… d pr extproc('xmlXPathCastStringToNumber') d like(xmlCdouble) d val * value options(*string) const xmlChar *
d xmlXPathCastNodeToNumber… d pr extproc('xmlXPathCastNodeToNumber') d like(xmlCdouble) d node value like(xmlNodePtr)
d xmlXPathCastNodeSetToNumber… d pr extproc( d 'xmlXPathCastNodeSetToNumber') d like(xmlCdouble) d ns value like(xmlNodeSetPtr)
d xmlXPathCastToNumber… d pr extproc('xmlXPathCastToNumber') d like(xmlCdouble) d val value like(xmlXPathObjectPtr)
d xmlXPathCastBooleanToString… d pr * extproc( xmlChar * d 'xmlXPathCastBooleanToString') d val value like(xmlCint)
d xmlXPathCastNumberToString… d pr * extproc('xmlXPathCastNumberToString')xmlChar * d val value like(xmlCdouble)
d xmlXPathCastNodeToString… d pr * extproc('xmlXPathCastNodeToString') xmlChar * d node value like(xmlNodePtr)
d xmlXPathCastNodeSetToString… d pr * extproc('xmlXPathCastNodeSetToString'xmlChar * d ) d ns value like(xmlNodeSetPtr)
d xmlXPathCastToString… d pr * extproc('xmlXPathCastToString') xmlChar * d val value like(xmlXPathObjectPtr)
d xmlXPathConvertBoolean… d pr extproc('xmlXPathConvertBoolean') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr)
d xmlXPathConvertNumber… d pr extproc('xmlXPathConvertNumber') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr)
d xmlXPathConvertString… d pr extproc('xmlXPathConvertString') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr)
* Context handling.
d xmlXPathNewContext… d pr extproc('xmlXPathNewContext') d like(xmlXPathContextPtr) d doc value like(xmlDocPtr)
d xmlXPathFreeContext… d pr extproc('xmlXPathFreeContext') d ctxt value like(xmlXPathContextPtr)
d xmlXPathContextSetCache… d pr extproc('xmlXPathContextSetCache') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d active value like(xmlCint) d value value like(xmlCint) d options value like(xmlCint)
* Evaluation functions.
d xmlXPathOrderDocElems… d pr extproc('xmlXPathOrderDocElems') d like(xmlClong) d doc value like(xmlDocPtr)
d xmlXPathSetContextNode… d pr extproc('xmlXPathSetContextNode') d like(xmlCint) d node value like(xmlNodePtr) d ctx value like(xmlXPathContextPtr)
d xmlXPathNodeEval… d pr extproc('xmlXPathNodeEval') d like(xmlXPathObjectPtr) d node value like(xmlNodePtr) d str * value options(*string) const xmlChar * d ctx value like(xmlXPathContextPtr)
d xmlXPathEval pr extproc('xmlXPathEval') d like(xmlXPathObjectPtr) d str * value options(*string) const xmlChar * d ctx value like(xmlXPathContextPtr)
d xmlXPathEvalExpression… d pr extproc('xmlXPathEvalExpression') d like(xmlXPathObjectPtr) d str * value options(*string) const xmlChar * d ctxt value like(xmlXPathContextPtr)
d xmlXPathEvalPredicate… d pr extproc('xmlXPathEvalPredicate') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d res value like(xmlXPathObjectPtr)
* Separate compilation/evaluation entry points.
d xmlXPathCompile… d pr extproc('xmlXPathCompile') d like(xmlXPathCompExprPtr) d str * value options(*string) const xmlChar *
d xmlXPathCtxtCompile… d pr extproc('xmlXPathCtxtCompile') d like(xmlXPathCompExprPtr) d ctxt value like(xmlXPathContextPtr) d str * value options(*string) const xmlChar *
d xmlXPathCompiledEval… d pr extproc('xmlXPathCompiledEval') d like(xmlXPathObjectPtr) d comp value like(xmlXPathCompExprPtr) d ctx value like(xmlXPathContextPtr)
d xmlXPathCompiledEvalToBoolean… d pr extproc( d 'xmlXPathCompiledEvalToBoolean') d like(xmlCint) d comp value like(xmlXPathCompExprPtr) d ctxt value like(xmlXPathContextPtr)
d xmlXPathFreeCompExpr… d pr extproc('xmlXPathFreeCompExpr') d comp value like(xmlXPathCompExprPtr)
/endif LIBXML_XPATH_ENABLED /undefine XML_TESTVAL /if defined(LIBXML_XPATH_ENABLED) /define XML_TESTVAL /elseif defined(LIBXML_SCHEMAS_ENABLED) /define XML_TESTVAL /endif /if defined(XML_TESTVAL)
d xmlXPathInit pr extproc('xmlXPathInit')
d xmlXPathIsNaN pr extproc('xmlXPathIsNaN') d like(xmlCint) d val value like(xmlCdouble)
d xmlXPathIsInf pr extproc('xmlXPathIsInf') d like(xmlCint) d val value like(xmlCdouble)
/undefine XML_TESTVAL /endif * C macros implemented as procedures for ILE/RPG support. /if defined(LIBXML_XPATH_ENABLED)
d xmlXPathNodeSetGetLength… d pr extproc('__xmlXPathNodeSetGetLength') d like(xmlCint) d ns value like(xmlNodeSetPtr)
d xmlXPathNodeSetItem… d pr extproc('__xmlXPathNodeSetItem') d like(xmlNodePtr) d ns value like(xmlNodeSetPtr) d index value like(xmlCint)
d xmlXPathNodeSetIsEmpty… d pr extproc('__xmlXPathNodeSetIsEmpty') d like(xmlCint) d ns value like(xmlNodeSetPtr)
/endif LIBXML_XPATH_ENABLED /endif XML_XPATH_H__