blob: 3df6501e58270a555c82c84b3ca4adb712994c6e [file] [log] [blame]
#ifndef DOMXPathResult_HEADER_GUARD_
#define DOMXPathResult_HEADER_GUARD_
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <xercesc/util/XercesDefs.hpp>
XERCES_CPP_NAMESPACE_BEGIN
class DOMXPathNSResolver;
class DOMXPathExpression;
class DOMNode;
/**
* The <code>DOMXPathResult</code> interface represents the result of the
* evaluation of an XPath 1.0 expression within the context of a particular
* node. Since evaluation of an XPath expression can result in various result
* types, this object makes it possible to discover and manipulate the type
* and value of the result.
* @since DOM Level 3
*/
class CDOM_EXPORT DOMXPathResult
{
protected:
// -----------------------------------------------------------------------
// Hidden constructors
// -----------------------------------------------------------------------
/** @name Hidden constructors */
//@{
DOMXPathResult() {};
//@}
private:
// -----------------------------------------------------------------------
// Unimplemented constructors and operators
// -----------------------------------------------------------------------
/** @name Unimplemented constructors and operators */
//@{
DOMXPathResult(const DOMXPathResult &);
DOMXPathResult& operator = (const DOMXPathResult&);
//@}
public:
// -----------------------------------------------------------------------
// All constructors are hidden, just the destructor is available
// -----------------------------------------------------------------------
/** @name Destructor */
//@{
/**
* Destructor
*
*/
virtual ~DOMXPathResult() {};
//@}
// -----------------------------------------------------------------------
// Class Types
// -----------------------------------------------------------------------
/** @name Public Contants */
//@{
/**
* <p>ANY_TYPE
* <br>This code does not represent a specific type. An evaluation of an XPath
* expression will never produce this type. If this type is requested, then
* the evaluation returns whatever type naturally results from evaluation
* of the expression.
* If the natural result is a node set when ANY_TYPE was requested, then
* UNORDERED_NODE_ITERATOR_TYPE is always the resulting type. Any other
* representation of a node set must be explicitly requested.
* <p>ANY_UNORDERED_NODE_TYPE
* <br>The result is a node set as defined by [XPath 1.0] and will be accessed
* as a single node, which may be nullif the node set is empty. Document
* modification does not invalidate the node, but may mean that the result
* node no longer corresponds to the current document. This is a convenience
* that permits optimization since the implementation can stop once any node
* in the resulting set has been found.
* If there is more than one node in the actual result, the single node
* returned might not be the first in document order.
* <p>BOOLEAN_TYPE
* <br>The result is a boolean as defined by [XPath 1.0]. Document modification
* does not invalidate the boolean, but may mean that reevaluation would not
* yield the same boolean.
* <p>FIRST_ORDERED_NODE_TYPE
* <br>The result is a node set as defined by [XPath 1.0] and will be accessed
* as a single node, which may be null if the node set is empty. Document
* modification does not invalidate the node, but may mean that the result
* node no longer corresponds to the current document. This is a convenience
* that permits optimization since the implementation can stop once the first
* node in document order of the resulting set has been found.
* If there are more than one node in the actual result, the single node
* returned will be the first in document order.
* <p>NUMBER_TYPE
* <br>The result is a number as defined by [XPath 1.0]. Document modification does
* not invalidate the number, but may mean that reevaluation would not yield the
* same number.
* <p>ORDERED_NODE_ITERATOR_TYPE
* <br>The result is a node set as defined by [XPath 1.0] that will be accessed
* iteratively, which will produce document-ordered nodes. Document modification
* invalidates the iteration.
* <p>ORDERED_NODE_SNAPSHOT_TYPE
* <br>The result is a node set as defined by [XPath 1.0] that will be accessed as a
* snapshot list of nodes that will be in original document order. Document
* modification does not invalidate the snapshot but may mean that reevaluation would
* not yield the same snapshot and nodes in the snapshot may have been altered, moved,
* or removed from the document.
* <p>STRING_TYPE
* <br>The result is a string as defined by [XPath 1.0]. Document modification does not
* invalidate the string, but may mean that the string no longer corresponds to the
* current document.
* <p>UNORDERED_NODE_ITERATOR_TYPE
* <br>The result is a node set as defined by [XPath 1.0] that will be accessed iteratively,
* which may not produce nodes in a particular order. Document modification invalidates the iteration.
* This is the default type returned if the result is a node set and ANY_TYPE is requested.
* <p>UNORDERED_NODE_SNAPSHOT_TYPE
* <br>The result is a node set as defined by [XPath 1.0] that will be accessed as a
* snapshot list of nodes that may not be in a particular order. Document modification
* does not invalidate the snapshot but may mean that reevaluation would not yield the same
* snapshot and nodes in the snapshot may have been altered, moved, or removed from the document.
*/
enum resultType {
ANY_TYPE = 0,
NUMBER_TYPE = 1,
STRING_TYPE = 2,
BOOLEAN_TYPE = 3,
UNORDERED_NODE_ITERATOR_TYPE = 4,
ORDERED_NODE_ITERATOR_TYPE = 5,
UNORDERED_NODE_SNAPSHOT_TYPE = 6,
ORDERED_NODE_SNAPSHOT_TYPE = 7,
ANY_UNORDERED_NODE_TYPE = 8,
FIRST_ORDERED_NODE_TYPE = 9
};
//@}
// -----------------------------------------------------------------------
// Virtual DOMDocument interface
// -----------------------------------------------------------------------
/** @name Functions introduced in DOM Level 3 */
//@{
/**
* Returns the boolean value of this result
* @return booleanValue of type boolean, readonly
* The value of this boolean result.
* @exception XPathException
* TYPE_ERR: raised if resultType is not BOOLEAN_TYPE.
*/
virtual bool getBooleanValue() const = 0;
/**
* Returns the state of the iterator
* @return invalidIteratorState
* Signifies that the iterator has become invalid. True if resultType is
* UNORDERED_NODE_ITERATOR_TYPE or ORDERED_NODE_ITERATOR_TYPE and the
* document has been modified since this result was returned.
* @exception XPathException
* TYPE_ERR: raised if resultType is not NUMBER_TYPE.
*/
virtual bool getInvalidIteratorState() const = 0;
/**
* Returns the number value of this result
* @return numberValue
* The value of this number result. If the native double type of the DOM
* binding does not directly support the exact IEEE 754 result of the XPath
* expression, then it is up to the definition of the binding to specify how
* the XPath number is converted to the native binding number.
* @exception XPathException
* TYPE_ERR: raised if resultType is not NUMBER_TYPE.
*/
virtual double getNumberValue() const = 0;
/**
* Returns the result type of this result
* @return resultType
* A code representing the type of this result, as defined by the type constants.
* @exception XPathException
* TYPE_ERR: raised if resultType is not ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE.
*/
virtual short getResultType() const = 0;
/**
* Returns the single node value of this result
* @return singleNodeValue
* The value of this single node result, which may be null.
* @exception XPathException
* TYPE_ERR: raised if resultType is not ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE.
*/
virtual DOMNode *getSingleNodeValue() const = 0;
/**
* Returns the snapshot length
* @return snapshotLength
* The number of nodes in the result snapshot. Valid values for snapshotItem indices
* are 0 to snapshotLength-1 inclusive.
* @exception XPathException
* TYPE_ERR: raised if resultType is not UNORDERED_NODE_SNAPSHOT_TYPE or
* ORDERED_NODE_SNAPSHOT_TYPE.
*/
virtual unsigned long getSnapshotLength() const = 0;
/**
* Returns the string value of this result
* @return stringValue
* The value of this string result.
* @exception XPathException
* TYPE_ERR: raised if resultType is not STRING_TYPE.
*/
virtual const XMLCh* getStringValue() const = 0;
/**
* Iterates and returns the next node from the node set or nullif there are no more nodes.
* @return the next node.
* @exception XPathException
* TYPE_ERR: raised if resultType is not UNORDERED_NODE_ITERATOR_TYPE or ORDERED_NODE_ITERATOR_TYPE.
* @exception DOMException
* INVALID_STATE_ERR: The document has been mutated since the result was returned.
*/
virtual DOMNode* iterateNext() const = 0;
/**
* Returns the indexth item in the snapshot collection. If index is greater than or
* equal to the number of nodes in the list, this method returns null. Unlike the
* iterator result, the snapshot does not become invalid, but may not correspond
* to the current document if it is mutated.
* @param index of type unsigned long - Index into the snapshot collection.
* @return The node at the indexth position in the NodeList, or null if that is not a valid index.
* @exception XPathException
* TYPE_ERR: raised if resultType is not UNORDERED_NODE_SNAPSHOT_TYPE or ORDERED_NODE_SNAPSHOT_TYPE.
*/
virtual DOMNode* snapshotItem(unsigned long index) const = 0;
//@}
};
XERCES_CPP_NAMESPACE_END
#endif