Xalan-C++ API Reference 1.12.0
XPathEvaluator.hpp
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18#if !defined(XPATHEVALUATOR_HEADER_GUARD_1357924680)
19#define XPATHEVALUATOR_HEADER_GUARD_1357924680
20
21
22
24
25
26
27#if defined(XALAN_AUTO_PTR_REQUIRES_DEFINITION)
32#endif
33
34
35
37
38
39
41
42
43
44namespace XALAN_CPP_NAMESPACE {
45
46
47
48#if !defined(XALAN_AUTO_PTR_REQUIRES_DEFINITION)
49class XObjectFactory;
50class XPathFactoryDefault;
51class XPathConstructionContextDefault;
52class XPathExecutionContextDefault;
53#endif
54
55
56
57class DOMSupport;
58class NodeRefList;
59class PrefixResolver;
60class XalanNode;
61class XalanElement;
62class XObjectPtr;
63class XPath;
64class XPathEnvSupport;
65class XPathExecutionContext;
66
67
68
70{
71public:
72
73 // Static initializer to be called before any instances are
74 // created. The call is _not_ thread-safe, you must only call
75 // it once, unless you have called terminate previously, and
76 // you want to re-initialize the library.
77 static void
78 initialize(MemoryManager& theManager XALAN_DEFAULT_MEMMGR);
79
80 // Static terminator to be called after all instances
81 // are destroyed. The call is _not_ thread-safe. Once
82 // terminated, you can call initialize() again, to
83 // re-initialize the library.
84 static void
86
87
88 XPathEvaluator(MemoryManager& theManager XALAN_DEFAULT_MEMMGR);
89
91
92 /**
93 * Evaluate the supplied XPath expression, within the given context. If
94 * the expression doesn't select a node, 0 is returned. If it selects
95 * more than one node, only the first is returned.
96 *
97 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
98 * @param contextNode The source tree context node
99 * @param xpathString The XPath expression to evaluate
100 * @param namespaceNode A node to use for namespace prefix resolution.
101 * @return A pointer to the node selected by the expression, if any.
102 */
103 XalanNode*
105 DOMSupport& domSupport,
106 XalanNode* contextNode,
107 const XalanDOMChar* xpathString,
108 const XalanElement* namespaceNode = 0);
109
110 /**
111 * Evaluate the supplied XPath expression, within the given context. If
112 * the expression doesn't select a node, 0 is returned. If it selects
113 * more than one node, only the first is returned.
114 *
115 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
116 * @param contextNode The source tree context node
117 * @param xpathString The XPath expression to evaluate
118 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
119 * @return A pointer to the node selected by the expression, if any.
120 */
121 XalanNode*
123 DOMSupport& domSupport,
124 XalanNode* contextNode,
125 const XalanDOMChar* xpathString,
126 const PrefixResolver& prefixResolver);
127
128 /**
129 * Evaluate the supplied XPath, within the given context. If
130 * the expression doesn't select a node, 0 is returned. If it selects
131 * more than one node, only the first is returned.
132 *
133 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
134 * @param contextNode The source tree context node
135 * @param xpath A reference to a compiled XPath expression.
136 * @param namespaceNode A node to use for namespace prefix resolution.
137 * @return A pointer to the node selected by the expression, if any.
138 */
139 XalanNode*
141 DOMSupport& domSupport,
142 XalanNode* contextNode,
143 const XPath& xpath,
144 const XalanElement* namespaceNode = 0);
145
146 /**
147 * Evaluate the supplied XPath, within the given context. If
148 * the expression doesn't select a node, 0 is returned. If it selects
149 * more than one node, only the first is returned.
150 *
151 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
152 * @param contextNode The source tree context node
153 * @param xpath A reference to a compiled XPath expression.
154 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
155 * @return A pointer to the node selected by the expression, if any.
156 */
157 XalanNode*
159 DOMSupport& domSupport,
160 XalanNode* contextNode,
161 const XPath& xpath,
162 const PrefixResolver& prefixResolver);
163
164 /**
165 * Evaluate the supplied XPath expression, within the given context. If
166 * the expression doesn't select a node, an empty list is returned.
167 *
168 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
169 * @param contextNode The source tree context node
170 * @param xpathString The XPath expression to evaluate
171 * @param namespaceNode A node to use for namespace prefix resolution.
172 * @return A list of selected nodes.
173 */
176 NodeRefList& result,
177 DOMSupport& domSupport,
178 XalanNode* contextNode,
179 const XalanDOMChar* xpathString,
180 const XalanElement* namespaceNode = 0);
181
182 /**
183 * Evaluate the supplied XPath expression, within the given context. If
184 * the expression doesn't select a node, an empty list is returned.
185 *
186 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
187 * @param contextNode The source tree context node
188 * @param xpathString The XPath expression to evaluate
189 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
190 * @return A list of selected nodes.
191 */
194 NodeRefList& result,
195 DOMSupport& domSupport,
196 XalanNode* contextNode,
197 const XalanDOMChar* xpathString,
198 const PrefixResolver& prefixResolver);
199
200 /**
201 * Evaluate the supplied XPath, within the given context. If
202 * the expression doesn't select a node, an empty list is returned.
203 *
204 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
205 * @param contextNode The source tree context node
206 * @param xpath A reference to a compiled XPath expression.
207 * @param namespaceNode A node to use for namespace prefix resolution.
208 * @return A list of selected nodes.
209 */
212 NodeRefList& result,
213 DOMSupport& domSupport,
214 XalanNode* contextNode,
215 const XPath& xpath,
216 const XalanElement* namespaceNode = 0);
217
218 /**
219 * Evaluate the supplied XPath, within the given context. If
220 * the expression doesn't select a node, an empty list is returned.
221 *
222 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
223 * @param contextNode The source tree context node
224 * @param xpath A reference to a compiled XPath expression.
225 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
226 * @return A list of selected nodes.
227 */
230 NodeRefList& result,
231 DOMSupport& domSupport,
232 XalanNode* contextNode,
233 const XPath& xpath,
234 const PrefixResolver& prefixResolver);
235
236 /**
237 * Evaluate the supplied XPath expression, within the given context. The
238 * result is returned as a generalized object. The object will be
239 * destroyed when the user's copy of the returned XObjectPtr goes out of
240 * scope, or when the XPathEvaluator goes out of scope or another expression
241 * is evaluated.
242 *
243 * The user's XObjectPtr copy _must_ no longer be in scope when the XPathEvaluator
244 * instance goes out of scope, or another expression is evaluated.
245 *
246 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
247 * @param contextNode The source tree context node
248 * @param xpathString The XPath expression to evaluate
249 * @param namespaceNode A node to use for namespace prefix resolution.
250 * @return The result of evaluting the XPath expression.
251 */
254 DOMSupport& domSupport,
255 XalanNode* contextNode,
256 const XalanDOMChar* xpathString,
257 const XalanElement* namespaceNode = 0);
258
259 /**
260 * Evaluate the supplied XPath expression, within the given context. The
261 * result is returned as a generalized object. The object will be
262 * destroyed when the user's copy of the returned XObjectPtr goes out of
263 * scope, or when the XPathEvaluator goes out of scope or another expression
264 * is evaluated.
265 *
266 * The user's XObjectPtr copy _must_ no longer be in scope when the XPathEvaluator
267 * instance goes out of scope, or another expression is evaluated.
268 *
269 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
270 * @param contextNode The source tree context node
271 * @param xpathString The XPath expression to evaluate
272 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
273 * @return The result of evaluting the XPath expression.
274 */
277 DOMSupport& domSupport,
278 XalanNode* contextNode,
279 const XalanDOMChar* xpathString,
280 const PrefixResolver& prefixResolver);
281
282 /**
283 * Evaluate the supplied XPath expression, within the given context. The
284 * result is returned as a generalized object. The object will be
285 * destroyed when the user's copy of the returned XObjectPtr goes out of
286 * scope, or when the XPathEvaluator goes out of scope or another expression
287 * is evaluated.
288 *
289 * The user's XObjectPtr copy _must_ no longer be in scope when the XPathEvaluator
290 * instance goes out of scope, or another expression is evaluated.
291 *
292 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
293 * @param contextNode The source tree context node
294 * @param xpath A reference to a compiled XPath expression.
295 * @param namespaceNode A node to use for namespace prefix resolution.
296 * @return The result of evaluting the XPath expression.
297 */
300 DOMSupport& domSupport,
301 XalanNode* contextNode,
302 const XPath& xpath,
303 const XalanElement* namespaceNode = 0);
304
305 /**
306 * Evaluate the supplied XPath expression, within the given context. The
307 * result is returned as a generalized object. The object will be
308 * destroyed when the user's copy of the returned XObjectPtr goes out of
309 * scope, or when the XPathEvaluator goes out of scope or another expression
310 * is evaluated.
311 *
312 * The user's XObjectPtr copy _must_ no longer be in scope when the XPathEvaluator
313 * instance goes out of scope, or another expression is evaluated.
314 *
315 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
316 * @param contextNode The source tree context node
317 * @param xpath A reference to a compiled XPath expression.
318 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
319 * @return The result of evaluting the XPath expression.
320 */
323 DOMSupport& domSupport,
324 XalanNode* contextNode,
325 const XPath& xpath,
326 const PrefixResolver& prefixResolver);
327
328 /**
329 * Compile an XPath expression into an object which can be used multiple times.
330 * Call destroyXPath() when finished with the instance. Otherwise, the object
331 * will be destroyed when the XPathEvaluator instance goes out of scope. Since
332 * no PrefixResolver is supplied, the XPath expression may not contain any
333 * namespace prefixes.
334 *
335 * @param xpathString The XPath expression to evaluate
336 * @return A pointer to an XPath instance.
337 */
338 XPath*
339 createXPath(const XalanDOMChar* xpathString);
340
341 /**
342 * Compile an XPath expression into an object which can be used multiple times.
343 * Call destroyXPath() when finished with the instance. Otherwise, the object
344 * will be destroyed when the XPathEvaluator instance goes out of scope.
345 *
346 * @param xpathString The XPath expression to evaluate
347 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
348 * @param namespaceNode A node to use for namespace prefix resolution.
349 * @return A pointer to an XPath instance.
350 */
351 XPath*
353 const XalanDOMChar* xpathString,
354 DOMSupport& domSupport,
355 const XalanElement* namespaceNode);
356
357 /**
358 * Compile an XPath expression into an object which can be used multiple times.
359 * Call destroyXPath() when finished with the instance. Otherwise, the object
360 * will be destroyed when the XPathEvaluator instance goes out of scope.
361 *
362 * @param xpathString The XPath expression to evaluate
363 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
364 * @return A pointer to an XPath instance.
365 */
366 XPath*
368 const XalanDOMChar* xpathString,
369 const PrefixResolver& prefixResolver);
370
371 /**
372 * Destory a compiled XPath instance. The instance must have
373 * been created using createXPath().
374 *
375 * @param theXPath The XPath instance to destroy
376 * @return true if the instance was successfully destroyed
377 */
378 bool
379 destroyXPath(XPath* theXPath);
380
383
384private:
385
386 /**
387 * A helper function to evaluate the supplied XPath expression, within
388 * the given context.
389 *
390 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
391 * @param contextNode The source tree context node
392 * @param xpathString The XPath expression to evaluate
393 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
394 * @param envSupport The XPathEnvSupport instance to use.
395 * @return The result of evaluting the XPath expression.
396 */
398 evaluate(
399 DOMSupport& domSupport,
400 XalanNode* contextNode,
401 const XalanDOMChar* xpathString,
402 const PrefixResolver& prefixResolver,
403 XPathEnvSupport& envSupport);
404
405 /**
406 * A helper function to evaluate the supplied XPath expression, within
407 * the given context.
408 *
409 * @param domSupport An instance of the corresponding DOMSupport-derived for the DOM implementation being used.
410 * @param contextNode The source tree context node
411 * @param xpath The XPath to evaluate
412 * @param prefixResolver A prefix resolver instance to use for namespace prefix resolution.
413 * @param envSupport The XPathEnvSupport instance to use.
414 * @return The result of evaluting the XPath expression.
415 */
417 evaluate(
418 DOMSupport& domSupport,
419 XalanNode* contextNode,
420 const XPath& xpath,
421 const PrefixResolver& prefixResolver,
422 XPathEnvSupport& envSupport);
423
424 // Data members...
425 const XalanMemMgrAutoPtr<XObjectFactory> m_xobjectFactory;
426
427 const XalanMemMgrAutoPtr<XPathFactoryDefault> m_xpathFactory;
428
429 const XalanMemMgrAutoPtr<XPathConstructionContextDefault> m_constructionContext;
430
432
433 MemoryManager& m_memoryManager;
434};
435
436
437
438}
439
440
441
442#endif // XPATHEVALUATOR_HEADER_GUARD_1357924680
#define XALAN_XPATH_EXPORT
#define XALAN_DEFAULT_MEMMGR
#define XALAN_CPP_NAMESPACE
Xalan-C++ namespace, including major and minor version.
Local implementation of NodeRefList.
This class defines an interface for classes that resolve namespace prefixes to their URIs.
Class to hold XObjectPtr return types.
Definition XObject.hpp:884
XObjectPtr evaluate(DOMSupport &domSupport, XalanNode *contextNode, const XPath &xpath, const PrefixResolver &prefixResolver)
Evaluate the supplied XPath expression, within the given context.
XPath * createXPath(const XalanDOMChar *xpathString, const PrefixResolver &prefixResolver)
Compile an XPath expression into an object which can be used multiple times.
XPathEvaluator(MemoryManager &theManager XALAN_DEFAULT_MEMMGR)
NodeRefList & selectNodeList(NodeRefList &result, DOMSupport &domSupport, XalanNode *contextNode, const XalanDOMChar *xpathString, const XalanElement *namespaceNode=0)
Evaluate the supplied XPath expression, within the given context.
XObjectPtr evaluate(DOMSupport &domSupport, XalanNode *contextNode, const XalanDOMChar *xpathString, const PrefixResolver &prefixResolver)
Evaluate the supplied XPath expression, within the given context.
NodeRefList & selectNodeList(NodeRefList &result, DOMSupport &domSupport, XalanNode *contextNode, const XPath &xpath, const XalanElement *namespaceNode=0)
Evaluate the supplied XPath, within the given context.
XPath * createXPath(const XalanDOMChar *xpathString, DOMSupport &domSupport, const XalanElement *namespaceNode)
Compile an XPath expression into an object which can be used multiple times.
XObjectPtr evaluate(DOMSupport &domSupport, XalanNode *contextNode, const XPath &xpath, const XalanElement *namespaceNode=0)
Evaluate the supplied XPath expression, within the given context.
XalanNode * selectSingleNode(DOMSupport &domSupport, XalanNode *contextNode, const XPath &xpath, const XalanElement *namespaceNode=0)
Evaluate the supplied XPath, within the given context.
XPathExecutionContext & getExecutionContext()
XalanNode * selectSingleNode(DOMSupport &domSupport, XalanNode *contextNode, const XPath &xpath, const PrefixResolver &prefixResolver)
Evaluate the supplied XPath, within the given context.
static void initialize(MemoryManager &theManager XALAN_DEFAULT_MEMMGR)
XObjectPtr evaluate(DOMSupport &domSupport, XalanNode *contextNode, const XalanDOMChar *xpathString, const XalanElement *namespaceNode=0)
Evaluate the supplied XPath expression, within the given context.
NodeRefList & selectNodeList(NodeRefList &result, DOMSupport &domSupport, XalanNode *contextNode, const XPath &xpath, const PrefixResolver &prefixResolver)
Evaluate the supplied XPath, within the given context.
XalanNode * selectSingleNode(DOMSupport &domSupport, XalanNode *contextNode, const XalanDOMChar *xpathString, const XalanElement *namespaceNode=0)
Evaluate the supplied XPath expression, within the given context.
static void terminate()
XalanNode * selectSingleNode(DOMSupport &domSupport, XalanNode *contextNode, const XalanDOMChar *xpathString, const PrefixResolver &prefixResolver)
Evaluate the supplied XPath expression, within the given context.
NodeRefList & selectNodeList(NodeRefList &result, DOMSupport &domSupport, XalanNode *contextNode, const XalanDOMChar *xpathString, const PrefixResolver &prefixResolver)
Evaluate the supplied XPath expression, within the given context.
XPath * createXPath(const XalanDOMChar *xpathString)
Compile an XPath expression into an object which can be used multiple times.
bool destroyXPath(XPath *theXPath)
Destory a compiled XPath instance.