• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1      * Summary: XML Path Language implementation
2      * Description: API for the XML Path Language implementation
3      *
4      * XML Path Language implementation
5      * XPath is a language for addressing parts of an XML document,
6      * designed to be used by both XSLT and XPointer
7      *     http://www.w3.org/TR/xpath
8      *
9      * Implements
10      * W3C Recommendation 16 November 1999
11      *     http://www.w3.org/TR/1999/REC-xpath-19991116
12      *
13      * Copy: See Copyright for the status of this software.
14      *
15      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
16
17      /if not defined(XML_XPATH_H__)
18      /define XML_XPATH_H__
19
20      /include "libxmlrpg/xmlversion"
21
22      /if defined(LIBXML_XPATH_ENABLED)
23
24      /include "libxmlrpg/xmlerror"
25      /include "libxmlrpg/tree"
26      /include "libxmlrpg/hash"
27      /endif                                                                    LIBXML_XPATH_ENABLED
28
29      /if defined(LIBXML_XPATH_ENABLED)
30
31     d xmlXPathContextPtr...
32     d                 s               *   based(######typedef######)
33
34     d xmlXPathParserContextPtr...
35     d                 s               *   based(######typedef######)
36
37      * The set of XPath error codes.
38
39     d xmlXPathError   s             10i 0 based(######typedef######)           enum
40     d  XPATH_EXPRESSION_OK...
41     d                 c                   0
42     d  XPATH_NUMBER_ERROR...
43     d                 c                   1
44     d  XPATH_UNFINISHED_LITERAL_ERROR...
45     d                 c                   2
46     d  XPATH_START_LITERAL_ERROR...
47     d                 c                   3
48     d  XPATH_VARIABLE_REF_ERROR...
49     d                 c                   4
50     d  XPATH_UNDEF_VARIABLE_ERROR...
51     d                 c                   5
52     d  XPATH_INVALID_PREDICATE_ERROR...
53     d                 c                   6
54     d  XPATH_EXPR_ERROR...
55     d                 c                   7
56     d  XPATH_UNCLOSED_ERROR...
57     d                 c                   8
58     d  XPATH_UNKNOWN_FUNC_ERROR...
59     d                 c                   9
60     d  XPATH_INVALID_OPERAND...
61     d                 c                   10
62     d  XPATH_INVALID_TYPE...
63     d                 c                   11
64     d  XPATH_INVALID_ARITY...
65     d                 c                   12
66     d  XPATH_INVALID_CTXT_SIZE...
67     d                 c                   13
68     d  XPATH_INVALID_CTXT_POSITION...
69     d                 c                   14
70     d  XPATH_MEMORY_ERROR...
71     d                 c                   15
72     d  XPTR_SYNTAX_ERROR...
73     d                 c                   16
74     d  XPTR_RESOURCE_ERROR...
75     d                 c                   17
76     d  XPTR_SUB_RESOURCE_ERROR...
77     d                 c                   18
78     d  XPATH_UNDEF_PREFIX_ERROR...
79     d                 c                   19
80     d  XPATH_ENCODING_ERROR...
81     d                 c                   20
82     d  XPATH_INVALID_CHAR_ERROR...
83     d                 c                   21
84     d  XPATH_INVALID_CTXT...
85     d                 c                   22
86     d  XPATH_STACK_ERROR...
87     d                 c                   23
88     d  XPATH_FORBID_VARIABLE_ERROR...
89     d                 c                   24
90
91      * A node-set (an unordered collection of nodes without duplicates).
92
93     d xmlNodeSetPtr   s               *   based(######typedef######)
94
95     d xmlNodeSet      ds                  based(xmlNodeSetPtr)
96     d                                     align qualified
97     d  nodeNr                       10i 0                                      Set node count
98     d  nodeMax                      10i 0                                      Max # nodes in set
99     d  nodeTab                        *                                        xmlNodePtr *
100
101      * An expression is evaluated to yield an object, which
102      * has one of the following four basic types:
103      *   - node-set
104      *   - boolean
105      *   - number
106      *   - string
107      *
108      * @@ XPointer will add more types !
109
110     d xmlXPathObjectType...
111     d                 s             10i 0 based(######typedef######)           enum
112     d  XPATH_UNDEFINED...
113     d                 c                   0
114     d  XPATH_NODESET  c                   1
115     d  XPATH_BOOLEAN  c                   2
116     d  XPATH_NUMBER   c                   3
117     d  XPATH_STRING   c                   4
118     d  XPATH_POINT    c                   5
119     d  XPATH_RANGE    c                   6
120     d  XPATH_LOCATIONSET...
121     d                 c                   7
122     d  XPATH_USERS    c                   8
123     d  XPATH_XSLT_TREE...                                                      R/O XSLT value tree
124     d                 c                   9
125
126     d xmlXPathObjectPtr...
127     d                 s               *   based(######typedef######)
128
129     d xmlXPathObject  ds                  based(xmlXPathObjectPtr)
130     d                                     align qualified
131     d  type                               like(xmlXPathObjectType)
132     d  nodesetval                         like(xmlNodeSetPtr)
133     d  boolval                      10i 0
134     d  floatval                      8f
135     d  stringval                      *                                        xmlChar *
136     d  user                           *                                        void *
137     d  index                        10i 0
138     d  user2                          *                                        void *
139     d  index2                       10i 0
140
141      * xmlXPathConvertFunc:
142      * @obj:  an XPath object
143      * @type:  the number of the target type
144      *
145      * A conversion function is associated to a type and used to cast
146      * the new type to primitive values.
147      *
148      * Returns -1 in case of error, 0 otherwise
149
150     d xmlXPathConvertFunc...
151     d                 s               *   based(######typedef######)
152     d                                     procptr
153
154      * Extra type: a name and a conversion function.
155
156     d xmlXPathTypePtr...
157     d                 s               *   based(######typedef######)
158
159     d xmlXPathType    ds                  based(xmlXPathTypePtr)
160     d                                     align qualified
161     d  name                           *                                        The type name
162     d  func                               like(xmlXPathConvertFunc)            Conversion function
163
164      * Extra variable: a name and a value.
165
166     d xmlXPathVariablePtr...
167     d                 s               *   based(######typedef######)
168
169     d xmlXPathVariable...
170     d                 ds                  based(xmlXPathVariablePtr)
171     d                                     align qualified
172     d  name                           *                                        The variable name
173     d  value                              like(xmlXPathObjectPtr)              The value
174
175      * xmlXPathEvalFunc:
176      * @ctxt: an XPath parser context
177      * @nargs: the number of arguments passed to the function
178      *
179      * An XPath evaluation function, the parameters are on the XPath
180      *   context stack.
181
182     d xmlXPathEvalFunc...
183     d                 s               *   based(######typedef######)
184     d                                     procptr
185
186      * Extra function: a name and an evaluation function.
187
188     d xmlXPathFuncPtr...
189     d                 s               *   based(######typedef######)
190
191     d xmlXPathFunct   ds                  based(xmlXPathFuncPtr)
192     d                                     align qualified
193     d  name                           *                                        The function name
194     d  func                               like(xmlXPathEvalFunc)               Evaluation function
195
196      * xmlXPathAxisFunc:
197      * @ctxt:  the XPath interpreter context
198      * @cur:  the previous node being explored on that axis
199      *
200      * An axis traversal function. To traverse an axis, the engine calls
201      * the first time with cur == NULL and repeat until the function returns
202      * NULL indicating the end of the axis traversal.
203      *
204      * Returns the next node in that axis or NULL if at the end of the axis.
205
206     d xmlXPathAxisFunc...
207     d                 s               *   based(######typedef######)
208     d                                     procptr
209
210      * Extra axis: a name and an axis function.
211
212     d xmlXPathAxisPtr...
213     d                 s               *   based(######typedef######)
214
215     d xmlXPathAxis    ds                  based(xmlXPathAxisPtr)
216     d                                     align qualified
217     d  name                           *                                        The axis name
218     d  func                               like(xmlXPathAxisFunc)               The search function
219
220      * xmlXPathFunction:
221      * @ctxt:  the XPath interprestation context
222      * @nargs:  the number of arguments
223      *
224      * An XPath function.
225      * The arguments (if any) are popped out from the context stack
226      * and the result is pushed on the stack.
227
228     d xmlXPathFunction...
229     d                 s               *   based(######typedef######)
230     d                                     procptr
231
232      * Function and Variable Lookup.
233
234      * xmlXPathVariableLookupFunc:
235      * @ctxt:  an XPath context
236      * @name:  name of the variable
237      * @ns_uri:  the namespace name hosting this variable
238      *
239      * Prototype for callbacks used to plug variable lookup in the XPath
240      * engine.
241      *
242      * Returns the XPath object value or NULL if not found.
243
244     d xmlXPathVariableLookupFunc...
245     d                 s               *   based(######typedef######)
246     d                                     procptr
247
248      * xmlXPathFuncLookupFunc:
249      * @ctxt:  an XPath context
250      * @name:  name of the function
251      * @ns_uri:  the namespace name hosting this function
252      *
253      * Prototype for callbacks used to plug function lookup in the XPath
254      * engine.
255      *
256      * Returns the XPath function or NULL if not found.
257
258     d xmlXPathFuncLookupFunc...
259     d                 s               *   based(######typedef######)
260     d                                     procptr
261
262      * xmlXPathFlags:
263      * Flags for XPath engine compilation and runtime
264
265      * XML_XPATH_CHECKNS:
266      *
267      * check namespaces at compilation
268
269     d  XML_XPATH_CHECKNS...
270     d                 c                   X'0001'
271
272      * XML_XPATH_NOVAR:
273      *
274      * forbid variables in expression
275
276     d  XML_XPATH_NOVAR...
277     d                 c                   X'0002'
278
279      * xmlXPathContext:
280      *
281      * Expression evaluation occurs with respect to a context.
282      * he context consists of:
283      *    - a node (the context node)
284      *    - a node list (the context node list)
285      *    - a set of variable bindings
286      *    - a function library
287      *    - the set of namespace declarations in scope for the expression
288      * Following the switch to hash tables, this need to be trimmed up at
289      * the next binary incompatible release.
290      * The node may be modified when the context is passed to libxml2
291      * for an XPath evaluation so you may need to initialize it again
292      * before the next call.
293
294     d xmlXPathContext...
295     d                 ds                  based(xmlXPathContextPtr)
296     d                                     align qualified
297     d  doc                                like(xmlDocPtr)                      Current document
298     d  node                               like(xmlNodePtr)                     Current node
299      *
300     d  nb_variables_unused...                                                  Unused (hash table)
301     d                               10i 0
302     d  max_variables_unused...                                                  Unused (hash table)
303     d                               10i 0
304     d  varHash                            like(xmlHashTablePtr)                 Defined variables
305      *
306     d  nb_types                     10i 0                                       # of defined types
307     d  max_types                    10i 0                                       Max number of types
308     d  types                              like(xmlXPathTypePtr)                 Defined types array
309      *
310     d  nb_funcs_unused...                                                      Unused (hash table)
311     d                               10i 0
312     d  max_funcs_unused...                                                      Unused (hash table)
313     d                               10i 0
314     d  funcHash                           like(xmlHashTablePtr)                 Defined functions
315      *
316     d  nb_axis                      10i 0                                       # of defined axis
317     d  max_axis                     10i 0                                       Max number of axis
318     d  axis                               like(xmlXPathAxisPtr)                 Defined axis array
319      *
320      * the namespace nodes of the context node
321      *
322     d  namespaces                     *                                         xmlNsPtr *
323     d  nsNr                         10i 0                                       # scope namespaces
324     d  user                           *   procptr                               Function to free
325      *
326      * extra variables
327      *
328     d  contextSize                  10i 0                                       The context size
329     d  proximityPosition...
330     d                               10i 0
331      *
332      * extra stuff for XPointer
333      *
334     d  xptr                         10i 0                                       XPointer context ?
335     d  here                               like(xmlNodePtr)                      For here()
336     d  origin                             like(xmlNodePtr)                      For origin()
337      *
338      * the set of namespace declarations in scope for the expression
339      *
340     d  nsHash                             like(xmlHashTablePtr)                 Namespace hashtable
341     d  varLookupFunc                      like(xmlXPathVariableLookupFunc)      Var lookup function
342     d  varLookupData                  *                                         void *
343      *
344      * Possibility to link in an extra item
345      *
346     d  extra                          *                                         void *
347      *
348      * The function name and URI when calling a function
349      *
350     d  function                       *                                         const xmlChar *
351     d  functionURI                    *                                         const xmlChar *
352      *
353      * function lookup function and data
354      *
355     d  funcLookupFunc...                                                        Func lookup func
356     d                                     like(xmlXPathVariableLookupFunc)
357     d  funcLookupData...                                                        void *
358     d                                 *
359      *
360      * temporary namespace lists kept for walking the namespace axis
361      *
362     d  tmpNsList                      *                                        xmlNsPtr *
363     d  tmpNsNr                      10i 0                                      # scope namespaces
364      *
365      * error reporting mechanism
366      *
367     d  userData                       *                                        void *
368     d  error                              like(xmlStructuredErrorFunc)         Error callback
369     d  lastError                          like(xmlError)                       The last error
370     d  debugNode                          like(xmlNodePtr)                     XSLT source node
371      *
372      * dictionary
373      *
374     d  dict                               like(xmlDictPtr)                     Dictionary if any
375      *
376     d  flags                        10i 0                                      Compilation control
377      *
378      * Cache for reusal of XPath objects
379      *
380     d  cache                          *                                        void *
381
382      * The structure of a compiled expression form is not public.
383
384     d xmlXPathCompExprPtr...
385     d                 s               *   based(######typedef######)
386
387      * xmlXPathParserContext:
388      *
389      * An XPath parser context. It contains pure parsing informations,
390      * an xmlXPathContext, and the stack of objects.
391
392     d xmlXPathParserContext...
393     d                 ds                  based(xmlXPathParserContextPtr)
394     d                                     align qualified
395     d  cur                            *                                        const xmlChar *
396     d  base                           *                                        const xmlChar *
397      *
398     d  error                        10i 0                                      Error code
399      *
400     d  context                            like(xmlXPathContextPtr)             Evaluation context
401     d  value                              like(xmlXPathObjectPtr)              The current value
402     d  valueNr                      10i 0                                      Value stack depth
403     d  valueMax                     10i 0                                      Max stack depth
404     d  valueTab                       *                                        xmlXPathObjectPtr *
405      *
406     d  comp                               like(xmlXPathCompExprPtr)            Precompiled expr.
407     d  xptr                         10i 0                                      XPointer expression?
408     d  ancestor                           like(xmlNodePtr)                     To walk prec. axis
409      *
410     d  valueFrame                   10i 0                                      Limit stack pop
411
412      **************************************************************************
413      *                                                                        *
414      *                             Public API                                 *
415      *                                                                        *
416      **************************************************************************
417
418      * Objects and Nodesets handling
419
420     d xmlXPathNAN     s              8f   import('xmlXPathNAN')
421     d xmlXPathPINF    s              8f   import('xmlXPathPINF')
422     d xmlXPathNINF    s              8f   import('xmlXPathNINF')
423
424     d xmlXPathFreeObject...
425     d                 pr                  extproc('xmlXPathFreeObject')
426     d obj                                 value like(xmlXPathObjectPtr)
427
428     d xmlXPathNodeSetCreate...
429     d                 pr                  extproc('xmlXPathNodeSetCreate')
430     d                                     like(xmlNodeSetPtr)
431     d val                                 value like(xmlNodePtr)
432
433     d xmlXPathFreeNodeSetList...
434     d                 pr                  extproc('xmlXPathFreeNodeSetList')
435     d obj                                 value like(xmlXPathObjectPtr)
436
437     d xmlXPathFreeNodeSet...
438     d                 pr                  extproc('xmlXPathFreeNodeSet')
439     d obj                                 value like(xmlNodeSetPtr)
440
441     d xmlXPathObjectCopy...
442     d                 pr                  extproc('xmlXPathObjectCopy')
443     d                                     like(xmlXPathObjectPtr)
444     d val                                 value like(xmlXPathObjectPtr)
445
446     d xmlXPathCmpNodes...
447     d                 pr            10i 0 extproc('xmlXPathCmpNodes')
448     d node1                               value like(xmlNodePtr)
449     d node2                               value like(xmlNodePtr)
450
451      * Conversion functions to basic types.
452
453     d xmlXPathCastNumberToBoolean...
454     d                 pr            10i 0 extproc(
455     d                                      'xmlXPathCastNumberToBoolean')
456     d val                            8f   value
457
458     d xmlXPathCastStringToBoolean...
459     d                 pr            10i 0 extproc(
460     d                                      'xmlXPathCastStringToBoolean')
461     d val                             *   value options(*string)               const xmlChar *
462
463     d xmlXPathCastNodeSetToBoolean...
464     d                 pr            10i 0 extproc(
465     d                                     'xmlXPathCastNodeSetToBoolean')
466     d ns                                  value like(xmlNodeSetPtr)
467
468     d xmlXPathCastToBoolean...
469     d                 pr            10i 0 extproc('xmlXPathCastToBoolean')
470     d val                                 value like(xmlXPathObjectPtr)
471
472     d xmlXPathCastBooleanToNumber...
473     d                 pr                  extproc(
474     d                                      'xmlXPathCastBooleanToNumber')
475     d                                8f
476     d val                           10i 0 value
477
478     d xmlXPathCastStringToNumber...
479     d                 pr             8f   extproc('xmlXPathCastStringToNumber')
480     d val                             *   value options(*string)               const xmlChar *
481
482     d xmlXPathCastNodeToNumber...
483     d                 pr             8f   extproc('xmlXPathCastNodeToNumber')
484     d node                                value like(xmlNodePtr)
485
486     d xmlXPathCastNodeSetToNumber...
487     d                 pr             8f   extproc(
488     d                                      'xmlXPathCastNodeSetToNumber')
489     d ns                                  value like(xmlNodeSetPtr)
490
491     d xmlXPathCastToNumber...
492     d                 pr             8f   extproc('xmlXPathCastToNumber')
493     d val                                 value like(xmlXPathObjectPtr)
494
495     d xmlXPathCastBooleanToString...
496     d                 pr              *   extproc(                             xmlChar *
497     d                                      'xmlXPathCastBooleanToString')
498     d val                           10i 0 value
499
500     d xmlXPathCastNumberToString...
501     d                 pr              *   extproc('xmlXPathCastNumberToString')xmlChar *
502     d val                            8f   value
503
504     d xmlXPathCastNodeToString...
505     d                 pr              *   extproc('xmlXPathCastNodeToString')  xmlChar *
506     d node                                value like(xmlNodePtr)
507
508     d xmlXPathCastNodeSetToString...
509     d                 pr              *   extproc('xmlXPathCastNodeSetToString'xmlChar *
510     d                                     )
511     d ns                                  value like(xmlNodeSetPtr)
512
513     d xmlXPathCastToString...
514     d                 pr              *   extproc('xmlXPathCastToString')      xmlChar *
515     d val                                 value like(xmlXPathObjectPtr)
516
517     d xmlXPathConvertBoolean...
518     d                 pr                  extproc('xmlXPathConvertBoolean')
519     d                                     like(xmlXPathObjectPtr)
520     d val                                 value like(xmlXPathObjectPtr)
521
522     d xmlXPathConvertNumber...
523     d                 pr                  extproc('xmlXPathConvertNumber')
524     d                                     like(xmlXPathObjectPtr)
525     d val                                 value like(xmlXPathObjectPtr)
526
527     d xmlXPathConvertString...
528     d                 pr                  extproc('xmlXPathConvertString')
529     d                                     like(xmlXPathObjectPtr)
530     d val                                 value like(xmlXPathObjectPtr)
531
532      * Context handling.
533
534     d xmlXPathNewContext...
535     d                 pr                  extproc('xmlXPathNewContext')
536     d                                     like(xmlXPathContextPtr)
537     d doc                                 value like(xmlDocPtr)
538
539     d xmlXPathFreeContext...
540     d                 pr                  extproc('xmlXPathFreeContext')
541     d ctxt                                value like(xmlXPathContextPtr)
542
543     d xmlXPathContextSetCache...
544     d                 pr            10i 0 extproc('xmlXPathContextSetCache')
545     d ctxt                                value like(xmlXPathContextPtr)
546     d active                        10i 0 value
547     d value                         10i 0 value
548     d options                       10i 0 value
549
550      * Evaluation functions.
551
552     d xmlXPathOrderDocElems...
553     d                 pr            20i 0 extproc('xmlXPathOrderDocElems')
554     d doc                                 value like(xmlDocPtr)
555
556     d xmlXPathSetContextNode...
557     d                 pr            10i 0 extproc('xmlXPathSetContextNode')
558     d node                                value like(xmlNodePtr)
559     d ctx                                 value like(xmlXPathContextPtr)
560
561     d xmlXPathNodeEval...
562     d                 pr                  extproc('xmlXPathNodeEval')
563     d                                     like(xmlXPathObjectPtr)
564     d node                                value like(xmlNodePtr)
565     d str                             *   value options(*string)               const xmlChar *
566     d ctx                                 value like(xmlXPathContextPtr)
567
568     d xmlXPathEval    pr                  extproc('xmlXPathEval')
569     d                                     like(xmlXPathObjectPtr)
570     d str                             *   value options(*string)               const xmlChar *
571     d ctx                                 value like(xmlXPathContextPtr)
572
573     d xmlXPathEvalExpression...
574     d                 pr                  extproc('xmlXPathEvalExpression')
575     d                                     like(xmlXPathObjectPtr)
576     d str                             *   value options(*string)               const xmlChar *
577     d ctxt                                value like(xmlXPathContextPtr)
578
579     d xmlXPathEvalPredicate...
580     d                 pr            10i 0 extproc('xmlXPathEvalPredicate')
581     d ctxt                                value like(xmlXPathContextPtr)
582     d res                                 value like(xmlXPathObjectPtr)
583
584      * Separate compilation/evaluation entry points.
585
586     d xmlXPathCompile...
587     d                 pr                  extproc('xmlXPathCompile')
588     d                                     like(xmlXPathCompExprPtr)
589     d str                             *   value options(*string)               const xmlChar *
590
591     d xmlXPathCtxtCompile...
592     d                 pr                  extproc('xmlXPathCtxtCompile')
593     d                                     like(xmlXPathCompExprPtr)
594     d ctxt                                value like(xmlXPathContextPtr)
595     d str                             *   value options(*string)               const xmlChar *
596
597     d xmlXPathCompiledEval...
598     d                 pr                  extproc('xmlXPathCompiledEval')
599     d                                     like(xmlXPathObjectPtr)
600     d comp                                value like(xmlXPathCompExprPtr)
601     d ctx                                 value like(xmlXPathContextPtr)
602
603     d xmlXPathCompiledEvalToBoolean...
604     d                 pr            10i 0 extproc(
605     d                                     'xmlXPathCompiledEvalToBoolean')
606     d comp                                value like(xmlXPathCompExprPtr)
607     d ctxt                                value like(xmlXPathContextPtr)
608
609     d xmlXPathFreeCompExpr...
610     d                 pr                  extproc('xmlXPathFreeCompExpr')
611     d comp                                value like(xmlXPathCompExprPtr)
612      /endif                                                                    LIBXML_XPATH_ENABLED
613
614      /undefine XML_TESTVAL
615      /if defined(LIBXML_XPATH_ENABLED)
616      /define XML_TESTVAL
617      /elseif defined(LIBXML_SCHEMAS_ENABLED)
618      /define XML_TESTVAL
619      /endif
620      /if defined(XML_TESTVAL)
621     d xmlXPathInit    pr                  extproc('xmlXPathInit')
622
623     d xmlXPathIsNaN   pr            10i 0 extproc('xmlXPathIsNaN')
624     d val                            8f   value
625
626     d xmlXPathIsInf   pr            10i 0 extproc('xmlXPathIsInf')
627     d val                            8f   value
628
629      /undefine XML_TESTVAL
630      /endif
631
632      * C macros implemented as procedures for ILE/RPG support.
633
634      /if defined(LIBXML_XPATH_ENABLED)
635     d xmlXPathNodeSetGetLength...
636     d                 pr            10i 0 extproc('__xmlXPathNodeSetGetLength')
637     d  ns                                 value like(xmlNodeSetPtr)
638
639     d xmlXPathNodeSetItem...
640     d                 pr                  extproc('__xmlXPathNodeSetItem')
641     d                                     like(xmlNodePtr)
642     d  ns                                 value like(xmlNodeSetPtr)
643     d  index                        10i 0 value
644
645     d xmlXPathNodeSetIsEmpty...
646     d                 pr            10i 0 extproc('__xmlXPathNodeSetIsEmpty')
647     d  ns                                 value like(xmlNodeSetPtr)
648      /endif                                                                    LIBXML_XPATH_ENABLED
649      /endif                                                                    XML_XPATH_H__
650