I searched the archives for "xpath result" (unquoted) and didn't get any
useful hits so:
The SimpleXPathAPI example does this after establishing the context
node:
// OK, let's evaluate the expression...
const XObjectPtr theResult(
theEvaluator.evaluate(
theDOMSupport,
theContextNode,
XalanDOMString(argv[3]).c_str(),
thePrefixResolver));
assert(theResult.null() == false);
cout << "The string value of the result is:"
<< endl
<< theResult->str()
<< endl
<< endl;
It would appear from this that the test for an unsuccessful XPath
evaluation is theResult.null() returning true. However, if I evaluate
an XPath expression containing an element or attribute that is not in
the file, that test fails - .null() returns false - and after converting
the result to a regular C char string, it is empty, zero length. If I
give the SimpleXPathAPI sample program an expression that will not
match, it prints "The string value of the result is ", indicating that
it too got a zero length result instead of null.
The API docs for XPathEvaluator::evaluate() just say that it returns the
result of the search. To find out exactly what that is, I dug through
the XPathEvaluator::evaluate() code as far as I could but I got lost in
all the cases in XPath::executeMore(). Searched the archive but didn't
find anything.
Q: which test should I use for an unsuccessful match, null or zero
length, or could I get both and they mean different things?
Thanks in advance,
-will