Eneboo - Documentación para desarrolladores
|
00001 /* 00002 * Summary: internal interfaces for XML Path Language implementation 00003 * Description: internal interfaces for XML Path Language implementation 00004 * used to build new modules on top of XPath like XPointer and 00005 * XSLT 00006 * 00007 * Copy: See Copyright for the status of this software. 00008 * 00009 * Author: Daniel Veillard 00010 */ 00011 00012 #ifndef __XML_XPATH_INTERNALS_H__ 00013 #define __XML_XPATH_INTERNALS_H__ 00014 00015 #include <libxml/xmlversion.h> 00016 #include <libxml/xpath.h> 00017 00018 #ifdef LIBXML_XPATH_ENABLED 00019 00020 #ifdef __cplusplus 00021 extern "C" { 00022 #endif 00023 00024 /************************************************************************ 00025 * * 00026 * Helpers * 00027 * * 00028 ************************************************************************/ 00029 00030 /* 00031 * Many of these macros may later turn into functions. They 00032 * shouldn't be used in #ifdef's preprocessor instructions. 00033 */ 00041 #define xmlXPathSetError(ctxt, err) \ 00042 { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \ 00043 if ((ctxt) != NULL) (ctxt)->error = (err); } 00044 00051 #define xmlXPathSetArityError(ctxt) \ 00052 xmlXPathSetError((ctxt), XPATH_INVALID_ARITY) 00053 00060 #define xmlXPathSetTypeError(ctxt) \ 00061 xmlXPathSetError((ctxt), XPATH_INVALID_TYPE) 00062 00071 #define xmlXPathGetError(ctxt) ((ctxt)->error) 00072 00081 #define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK) 00082 00091 #define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc) 00092 00101 #define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node) 00102 00103 XMLPUBFUN int XMLCALL 00104 xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt); 00105 XMLPUBFUN double XMLCALL 00106 xmlXPathPopNumber (xmlXPathParserContextPtr ctxt); 00107 XMLPUBFUN xmlChar * XMLCALL 00108 xmlXPathPopString (xmlXPathParserContextPtr ctxt); 00109 XMLPUBFUN xmlNodeSetPtr XMLCALL 00110 xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt); 00111 XMLPUBFUN void * XMLCALL 00112 xmlXPathPopExternal (xmlXPathParserContextPtr ctxt); 00113 00121 #define xmlXPathReturnBoolean(ctxt, val) \ 00122 valuePush((ctxt), xmlXPathNewBoolean(val)) 00123 00130 #define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1) 00131 00138 #define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0) 00139 00147 #define xmlXPathReturnNumber(ctxt, val) \ 00148 valuePush((ctxt), xmlXPathNewFloat(val)) 00149 00157 #define xmlXPathReturnString(ctxt, str) \ 00158 valuePush((ctxt), xmlXPathWrapString(str)) 00159 00166 #define xmlXPathReturnEmptyString(ctxt) \ 00167 valuePush((ctxt), xmlXPathNewCString("")) 00168 00176 #define xmlXPathReturnNodeSet(ctxt, ns) \ 00177 valuePush((ctxt), xmlXPathWrapNodeSet(ns)) 00178 00185 #define xmlXPathReturnEmptyNodeSet(ctxt) \ 00186 valuePush((ctxt), xmlXPathNewNodeSet(NULL)) 00187 00195 #define xmlXPathReturnExternal(ctxt, val) \ 00196 valuePush((ctxt), xmlXPathWrapExternal(val)) 00197 00207 #define xmlXPathStackIsNodeSet(ctxt) \ 00208 (((ctxt)->value != NULL) \ 00209 && (((ctxt)->value->type == XPATH_NODESET) \ 00210 || ((ctxt)->value->type == XPATH_XSLT_TREE))) 00211 00222 #define xmlXPathStackIsExternal(ctxt) \ 00223 ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS)) 00224 00231 #define xmlXPathEmptyNodeSet(ns) \ 00232 { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; } 00233 00239 #define CHECK_ERROR \ 00240 if (ctxt->error != XPATH_EXPRESSION_OK) return 00241 00247 #define CHECK_ERROR0 \ 00248 if (ctxt->error != XPATH_EXPRESSION_OK) return(0) 00249 00256 #define XP_ERROR(X) \ 00257 { xmlXPathErr(ctxt, X); return; } 00258 00265 #define XP_ERROR0(X) \ 00266 { xmlXPathErr(ctxt, X); return(0); } 00267 00275 #define CHECK_TYPE(typeval) \ 00276 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \ 00277 XP_ERROR(XPATH_INVALID_TYPE) 00278 00286 #define CHECK_TYPE0(typeval) \ 00287 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \ 00288 XP_ERROR0(XPATH_INVALID_TYPE) 00289 00296 #define CHECK_ARITY(x) \ 00297 if (ctxt == NULL) return; \ 00298 if (nargs != (x)) \ 00299 XP_ERROR(XPATH_INVALID_ARITY); 00300 00306 #define CAST_TO_STRING \ 00307 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \ 00308 xmlXPathStringFunction(ctxt, 1); 00309 00315 #define CAST_TO_NUMBER \ 00316 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \ 00317 xmlXPathNumberFunction(ctxt, 1); 00318 00324 #define CAST_TO_BOOLEAN \ 00325 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \ 00326 xmlXPathBooleanFunction(ctxt, 1); 00327 00328 /* 00329 * Variable Lookup forwarding. 00330 */ 00331 00332 XMLPUBFUN void XMLCALL 00333 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt, 00334 xmlXPathVariableLookupFunc f, 00335 void *data); 00336 00337 /* 00338 * Function Lookup forwarding. 00339 */ 00340 00341 XMLPUBFUN void XMLCALL 00342 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt, 00343 xmlXPathFuncLookupFunc f, 00344 void *funcCtxt); 00345 00346 /* 00347 * Error reporting. 00348 */ 00349 XMLPUBFUN void XMLCALL 00350 xmlXPatherror (xmlXPathParserContextPtr ctxt, 00351 const char *file, 00352 int line, 00353 int no); 00354 00355 XMLPUBFUN void XMLCALL 00356 xmlXPathErr (xmlXPathParserContextPtr ctxt, 00357 int error); 00358 00359 #ifdef LIBXML_DEBUG_ENABLED 00360 XMLPUBFUN void XMLCALL 00361 xmlXPathDebugDumpObject (FILE *output, 00362 xmlXPathObjectPtr cur, 00363 int depth); 00364 XMLPUBFUN void XMLCALL 00365 xmlXPathDebugDumpCompExpr(FILE *output, 00366 xmlXPathCompExprPtr comp, 00367 int depth); 00368 #endif 00369 00372 XMLPUBFUN int XMLCALL 00373 xmlXPathNodeSetContains (xmlNodeSetPtr cur, 00374 xmlNodePtr val); 00375 XMLPUBFUN xmlNodeSetPtr XMLCALL 00376 xmlXPathDifference (xmlNodeSetPtr nodes1, 00377 xmlNodeSetPtr nodes2); 00378 XMLPUBFUN xmlNodeSetPtr XMLCALL 00379 xmlXPathIntersection (xmlNodeSetPtr nodes1, 00380 xmlNodeSetPtr nodes2); 00381 00382 XMLPUBFUN xmlNodeSetPtr XMLCALL 00383 xmlXPathDistinctSorted (xmlNodeSetPtr nodes); 00384 XMLPUBFUN xmlNodeSetPtr XMLCALL 00385 xmlXPathDistinct (xmlNodeSetPtr nodes); 00386 00387 XMLPUBFUN int XMLCALL 00388 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1, 00389 xmlNodeSetPtr nodes2); 00390 00391 XMLPUBFUN xmlNodeSetPtr XMLCALL 00392 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, 00393 xmlNodePtr node); 00394 XMLPUBFUN xmlNodeSetPtr XMLCALL 00395 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1, 00396 xmlNodeSetPtr nodes2); 00397 XMLPUBFUN xmlNodeSetPtr XMLCALL 00398 xmlXPathNodeLeading (xmlNodeSetPtr nodes, 00399 xmlNodePtr node); 00400 XMLPUBFUN xmlNodeSetPtr XMLCALL 00401 xmlXPathLeading (xmlNodeSetPtr nodes1, 00402 xmlNodeSetPtr nodes2); 00403 00404 XMLPUBFUN xmlNodeSetPtr XMLCALL 00405 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, 00406 xmlNodePtr node); 00407 XMLPUBFUN xmlNodeSetPtr XMLCALL 00408 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1, 00409 xmlNodeSetPtr nodes2); 00410 XMLPUBFUN xmlNodeSetPtr XMLCALL 00411 xmlXPathNodeTrailing (xmlNodeSetPtr nodes, 00412 xmlNodePtr node); 00413 XMLPUBFUN xmlNodeSetPtr XMLCALL 00414 xmlXPathTrailing (xmlNodeSetPtr nodes1, 00415 xmlNodeSetPtr nodes2); 00416 00417 00422 XMLPUBFUN int XMLCALL 00423 xmlXPathRegisterNs (xmlXPathContextPtr ctxt, 00424 const xmlChar *prefix, 00425 const xmlChar *ns_uri); 00426 XMLPUBFUN const xmlChar * XMLCALL 00427 xmlXPathNsLookup (xmlXPathContextPtr ctxt, 00428 const xmlChar *prefix); 00429 XMLPUBFUN void XMLCALL 00430 xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt); 00431 00432 XMLPUBFUN int XMLCALL 00433 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt, 00434 const xmlChar *name, 00435 xmlXPathFunction f); 00436 XMLPUBFUN int XMLCALL 00437 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt, 00438 const xmlChar *name, 00439 const xmlChar *ns_uri, 00440 xmlXPathFunction f); 00441 XMLPUBFUN int XMLCALL 00442 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt, 00443 const xmlChar *name, 00444 xmlXPathObjectPtr value); 00445 XMLPUBFUN int XMLCALL 00446 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt, 00447 const xmlChar *name, 00448 const xmlChar *ns_uri, 00449 xmlXPathObjectPtr value); 00450 XMLPUBFUN xmlXPathFunction XMLCALL 00451 xmlXPathFunctionLookup (xmlXPathContextPtr ctxt, 00452 const xmlChar *name); 00453 XMLPUBFUN xmlXPathFunction XMLCALL 00454 xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt, 00455 const xmlChar *name, 00456 const xmlChar *ns_uri); 00457 XMLPUBFUN void XMLCALL 00458 xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt); 00459 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00460 xmlXPathVariableLookup (xmlXPathContextPtr ctxt, 00461 const xmlChar *name); 00462 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00463 xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt, 00464 const xmlChar *name, 00465 const xmlChar *ns_uri); 00466 XMLPUBFUN void XMLCALL 00467 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt); 00468 00472 XMLPUBFUN xmlXPathParserContextPtr XMLCALL 00473 xmlXPathNewParserContext (const xmlChar *str, 00474 xmlXPathContextPtr ctxt); 00475 XMLPUBFUN void XMLCALL 00476 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt); 00477 00478 /* TODO: remap to xmlXPathValuePop and Push. */ 00479 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00480 valuePop (xmlXPathParserContextPtr ctxt); 00481 XMLPUBFUN int XMLCALL 00482 valuePush (xmlXPathParserContextPtr ctxt, 00483 xmlXPathObjectPtr value); 00484 00485 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00486 xmlXPathNewString (const xmlChar *val); 00487 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00488 xmlXPathNewCString (const char *val); 00489 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00490 xmlXPathWrapString (xmlChar *val); 00491 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00492 xmlXPathWrapCString (char * val); 00493 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00494 xmlXPathNewFloat (double val); 00495 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00496 xmlXPathNewBoolean (int val); 00497 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00498 xmlXPathNewNodeSet (xmlNodePtr val); 00499 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00500 xmlXPathNewValueTree (xmlNodePtr val); 00501 XMLPUBFUN void XMLCALL 00502 xmlXPathNodeSetAdd (xmlNodeSetPtr cur, 00503 xmlNodePtr val); 00504 XMLPUBFUN void XMLCALL 00505 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur, 00506 xmlNodePtr val); 00507 XMLPUBFUN void XMLCALL 00508 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur, 00509 xmlNodePtr node, 00510 xmlNsPtr ns); 00511 XMLPUBFUN void XMLCALL 00512 xmlXPathNodeSetSort (xmlNodeSetPtr set); 00513 00514 XMLPUBFUN void XMLCALL 00515 xmlXPathRoot (xmlXPathParserContextPtr ctxt); 00516 XMLPUBFUN void XMLCALL 00517 xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt); 00518 XMLPUBFUN xmlChar * XMLCALL 00519 xmlXPathParseName (xmlXPathParserContextPtr ctxt); 00520 XMLPUBFUN xmlChar * XMLCALL 00521 xmlXPathParseNCName (xmlXPathParserContextPtr ctxt); 00522 00523 /* 00524 * Existing functions. 00525 */ 00526 XMLPUBFUN double XMLCALL 00527 xmlXPathStringEvalNumber (const xmlChar *str); 00528 XMLPUBFUN int XMLCALL 00529 xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, 00530 xmlXPathObjectPtr res); 00531 XMLPUBFUN void XMLCALL 00532 xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt); 00533 XMLPUBFUN xmlNodeSetPtr XMLCALL 00534 xmlXPathNodeSetMerge (xmlNodeSetPtr val1, 00535 xmlNodeSetPtr val2); 00536 XMLPUBFUN void XMLCALL 00537 xmlXPathNodeSetDel (xmlNodeSetPtr cur, 00538 xmlNodePtr val); 00539 XMLPUBFUN void XMLCALL 00540 xmlXPathNodeSetRemove (xmlNodeSetPtr cur, 00541 int val); 00542 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00543 xmlXPathNewNodeSetList (xmlNodeSetPtr val); 00544 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00545 xmlXPathWrapNodeSet (xmlNodeSetPtr val); 00546 XMLPUBFUN xmlXPathObjectPtr XMLCALL 00547 xmlXPathWrapExternal (void *val); 00548 00549 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt); 00550 XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt); 00551 XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict); 00552 XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt); 00553 XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt); 00554 XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt); 00555 XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt); 00556 XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt); 00557 XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt); 00558 00559 XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name); 00560 00561 /* 00562 * Some of the axis navigation routines. 00563 */ 00564 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, 00565 xmlNodePtr cur); 00566 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt, 00567 xmlNodePtr cur); 00568 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, 00569 xmlNodePtr cur); 00570 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, 00571 xmlNodePtr cur); 00572 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt, 00573 xmlNodePtr cur); 00574 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, 00575 xmlNodePtr cur); 00576 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, 00577 xmlNodePtr cur); 00578 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, 00579 xmlNodePtr cur); 00580 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, 00581 xmlNodePtr cur); 00582 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, 00583 xmlNodePtr cur); 00584 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, 00585 xmlNodePtr cur); 00586 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, 00587 xmlNodePtr cur); 00588 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, 00589 xmlNodePtr cur); 00590 /* 00591 * The official core of XPath functions. 00592 */ 00593 XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs); 00594 XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs); 00595 XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs); 00596 XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs); 00597 XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs); 00598 XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs); 00599 XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs); 00600 XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs); 00601 XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs); 00602 XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs); 00603 XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs); 00604 XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs); 00605 XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs); 00606 XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs); 00607 XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs); 00608 XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs); 00609 XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs); 00610 XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs); 00611 XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs); 00612 XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs); 00613 XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs); 00614 XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs); 00615 XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs); 00616 XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs); 00617 XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs); 00618 XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs); 00619 00623 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns); 00624 00625 #ifdef __cplusplus 00626 } 00627 #endif 00628 00629 #endif /* LIBXML_XPATH_ENABLED */ 00630 #endif /* ! __XML_XPATH_INTERNALS_H__ */