| SAXONICA | 
Saxon's implementation of XPathExpression (namely net.sf.saxon.xpath.XPathExpressionImpl)
            provides additional methods for evaluating the XPath expression. In particular the rawIterator()
            method with no arguments returns a Saxon SequenceIterator which allows the application to process
            the results of any XPath expression, with no conversion: all values will be represented using a native Saxon class,
            for example a node will be represented as a NodeInfo and a QName as a QNameValue.
            The NodeInfo interface is described in the next section.
         
The native Saxon methods rely on the dynamic context being established using separate setXX()
               calls on the XPathExpressionImpl object. If these methods are used, the XPathExpression
               object will not be thread-safe.
XPath itself provides no sorting capability. You can therefore specify a sort order in which you want
            the results of an expression returned. This is done by nominating another expression, via the setSortKey
            method: this second expression is applied to each item in the result sequence, and its value determines
            the position of that item in the sorted result order.
         
An alternative approach if you need sorting would be to use XQuery rather than XPath.
You can call methods directly on the NodeInfo object to get information about a node: for
            example getDisplayName() gets the name of the node in a form suitable for display, and
            getStringValue() gets the string value of the node, as defined in the XPath data model. You
            can also use the node as the context node for evaluation of subsequent expressions.