Package org.jaxen.dom

Class DocumentNavigator

  • All Implemented Interfaces:
    java.io.Serializable, Navigator

    public class DocumentNavigator
    extends DefaultNavigator
    Interface for navigating around the W3C DOM Level 2 object model.

    This class is not intended for direct usage, but is used by the Jaxen engine during evaluation.

    This class implements the DefaultNavigator interface for the Jaxen XPath library. This adapter allows the Jaxen library to be used to execute XPath queries against any object tree that implements the DOM level 2 interfaces.

    Note: DOM level 2 does not include a node representing an XPath namespace node. This navigator will return namespace nodes as instances of the custom NamespaceNode class, and users will have to check result sets to locate and isolate these.

    See Also:
    XPath, NamespaceNode, Serialized Form
    • Constructor Detail

      • DocumentNavigator

        public DocumentNavigator()
        Default constructor.
    • Method Detail

      • getInstance

        public static Navigator getInstance()
        Get a constant DocumentNavigator for efficiency.
        Returns:
        a constant instance of a DocumentNavigator.
      • getChildAxisIterator

        public java.util.Iterator getChildAxisIterator​(java.lang.Object contextNode)
        Get an iterator over all of this node's children.
        Specified by:
        getChildAxisIterator in interface Navigator
        Overrides:
        getChildAxisIterator in class DefaultNavigator
        Parameters:
        contextNode - the context node for the child axis.
        Returns:
        a possibly-empty iterator (not null)
      • getParentAxisIterator

        public java.util.Iterator getParentAxisIterator​(java.lang.Object contextNode)
        Get a (single-member) iterator over this node's parent.
        Specified by:
        getParentAxisIterator in interface Navigator
        Overrides:
        getParentAxisIterator in class DefaultNavigator
        Parameters:
        contextNode - the context node for the parent axis
        Returns:
        a possibly-empty iterator (not null)
      • getFollowingAxisIterator

        public java.util.Iterator getFollowingAxisIterator​(java.lang.Object contextNode)
        Get an iterator over all following nodes, depth-first.
        Specified by:
        getFollowingAxisIterator in interface Navigator
        Overrides:
        getFollowingAxisIterator in class DefaultNavigator
        Parameters:
        contextNode - the context node for the following axis
        Returns:
        a possibly-empty iterator (not null)
      • getAttributeAxisIterator

        public java.util.Iterator getAttributeAxisIterator​(java.lang.Object contextNode)
        Get an iterator over all attributes.
        Specified by:
        getAttributeAxisIterator in interface Navigator
        Overrides:
        getAttributeAxisIterator in class DefaultNavigator
        Parameters:
        contextNode - the context node for the attribute axis
        Returns:
        a possibly-empty iterator (not null)
      • getNamespaceAxisIterator

        public java.util.Iterator getNamespaceAxisIterator​(java.lang.Object contextNode)
        Get an iterator over all declared namespaces.

        Note: this iterator is not live: it takes a snapshot and that snapshot remains static during the life of the iterator (i.e. it won't reflect subsequent changes to the DOM).

        In the event that the DOM is inconsistent; for instance a pre:foo element is declared by DOM to be in the http://www.a.com/ namespace but also has an xmlns:pre="http://www.b.com" attribute; then only one of the namespaces will be counted. This will be the intrinsic namespace of the Element or Attr object rather than the one provide by the contradictory namespace declaration attribute. In the event of a contradiction between two attributes on the same element--e.g. pre:foo in the http://www.a.com/ namespace and pre:bar in the http://www.b.com/ namespace--it is undefined which namespace will be returned.

        Specified by:
        getNamespaceAxisIterator in interface Navigator
        Overrides:
        getNamespaceAxisIterator in class DefaultNavigator
        Parameters:
        contextNode - the context node for the namespace axis
        Returns:
        a possibly-empty iterator (not null)
      • parseXPath

        public XPath parseXPath​(java.lang.String xpath)
                         throws SAXPathException
        Returns a parsed form of the given XPath string, which will be suitable for queries on DOM documents.
        Parameters:
        xpath - the XPath expression
        Returns:
        a parsed form of the given XPath string
        Throws:
        SAXPathException - if the string is syntactically incorrect
        See Also:
        XPath
      • getElementNamespaceUri

        public java.lang.String getElementNamespaceUri​(java.lang.Object element)
        Get the namespace URI of an element.
        Parameters:
        element - the target node
        Returns:
        a string (possibly empty) if the node is an element, and null otherwise
      • getElementName

        public java.lang.String getElementName​(java.lang.Object element)
        Get the local name of an element.
        Parameters:
        element - the target node
        Returns:
        a string representing the unqualified local name if the node is an element, or null otherwise
      • getElementQName

        public java.lang.String getElementQName​(java.lang.Object element)
        Get the qualified name of an element.
        Parameters:
        element - the target node
        Returns:
        a string representing the qualified (i.e. possibly prefixed) name if the argument is an element, or null otherwise
      • getAttributeNamespaceUri

        public java.lang.String getAttributeNamespaceUri​(java.lang.Object attribute)
        Get the namespace URI of an attribute.
        Parameters:
        attribute - the target node
        Returns:
        the namespace name of the specified node
      • getAttributeName

        public java.lang.String getAttributeName​(java.lang.Object attribute)
        Get the local name of an attribute.
        Parameters:
        attribute - the target node
        Returns:
        a string representing the unqualified local name if the node is an attribute, or null otherwise
      • getAttributeQName

        public java.lang.String getAttributeQName​(java.lang.Object attribute)
        Get the qualified name of an attribute.
        Parameters:
        attribute - the target node
        Returns:
        a string representing the qualified (i.e. possibly prefixed) name if the argument is an attribute, or null otherwise
      • isDocument

        public boolean isDocument​(java.lang.Object object)
        Test if a node is a top-level document.
        Parameters:
        object - the target node
        Returns:
        true if the node is the document root, false otherwise
      • isNamespace

        public boolean isNamespace​(java.lang.Object object)
        Test if a node is a namespace.
        Parameters:
        object - the target node
        Returns:
        true if the node is a namespace, false otherwise
      • isElement

        public boolean isElement​(java.lang.Object object)
        Test if a node is an element.
        Parameters:
        object - the target node
        Returns:
        true if the node is an element, false otherwise
      • isAttribute

        public boolean isAttribute​(java.lang.Object object)
        Test if a node is an attribute. xmlns and xmlns:pre attributes do not count as attributes for the purposes of XPath.
        Parameters:
        object - the target node
        Returns:
        true if the node is an attribute, false otherwise
      • isComment

        public boolean isComment​(java.lang.Object object)
        Test if a node is a comment.
        Parameters:
        object - the target node
        Returns:
        true if the node is a comment, false otherwise
      • isText

        public boolean isText​(java.lang.Object object)
        Test if a node is plain text.
        Parameters:
        object - the target node
        Returns:
        true if the node is a text node, false otherwise
      • isProcessingInstruction

        public boolean isProcessingInstruction​(java.lang.Object object)
        Test if a node is a processing instruction.
        Parameters:
        object - the target node
        Returns:
        true if the node is a processing instruction, false otherwise
      • getElementStringValue

        public java.lang.String getElementStringValue​(java.lang.Object object)
        Get the string value of an element node.
        Parameters:
        object - the target node
        Returns:
        the text inside the node and its descendants if the node is an element, null otherwise
      • getStringValue

        private java.lang.StringBuffer getStringValue​(org.w3c.dom.Node node,
                                                      java.lang.StringBuffer buffer)
        Construct a node's string value recursively.
        Parameters:
        node - the current node
        buffer - the buffer for building the text
        Returns:
        the buffer passed as a parameter (for convenience)
      • getAttributeStringValue

        public java.lang.String getAttributeStringValue​(java.lang.Object object)
        Get the string value of an attribute node.
        Parameters:
        object - the target node
        Returns:
        the text of the attribute value if the node is an attribute, null otherwise
      • getTextStringValue

        public java.lang.String getTextStringValue​(java.lang.Object object)
        Get the string value of text.
        Parameters:
        object - the target node
        Returns:
        the string of text if the node is text, null otherwise
      • getCommentStringValue

        public java.lang.String getCommentStringValue​(java.lang.Object object)
        Get the string value of a comment node.
        Parameters:
        object - the target node
        Returns:
        the text of the comment if the node is a comment, null otherwise
      • getNamespaceStringValue

        public java.lang.String getNamespaceStringValue​(java.lang.Object object)
        Get the string value of a namespace node.
        Parameters:
        object - the target node
        Returns:
        the namespace URI as a (possibly empty) string if the node is a namespace node, null otherwise
      • getNamespacePrefix

        public java.lang.String getNamespacePrefix​(java.lang.Object object)
        Get the prefix value of a namespace node.
        Parameters:
        object - the target node
        Returns:
        the namespace prefix a (possibly empty) string if the node is a namespace node, null otherwise
      • translateNamespacePrefixToUri

        public java.lang.String translateNamespacePrefixToUri​(java.lang.String prefix,
                                                              java.lang.Object element)
        Translate a namespace prefix to a URI.
        Specified by:
        translateNamespacePrefixToUri in interface Navigator
        Overrides:
        translateNamespacePrefixToUri in class DefaultNavigator
        Parameters:
        prefix - the namespace prefix
        element - the namespace context
        Returns:
        the namespace URI bound to the prefix in the scope of element; null if the prefix is not bound
        See Also:
        NamespaceContext
      • getDocument

        public java.lang.Object getDocument​(java.lang.String uri)
                                     throws FunctionCallException
        Use JAXP to load a namespace aware document from a given URI.
        Specified by:
        getDocument in interface Navigator
        Overrides:
        getDocument in class DefaultNavigator
        Parameters:
        uri - the URI of the document to load
        Returns:
        the new W3C DOM Level 2 Document instance
        Throws:
        FunctionCallException - containing a nested exception if a problem occurs trying to parse the given document
      • getProcessingInstructionTarget

        public java.lang.String getProcessingInstructionTarget​(java.lang.Object obj)
        Get the target of a processing instruction node.
        Specified by:
        getProcessingInstructionTarget in interface Navigator
        Overrides:
        getProcessingInstructionTarget in class DefaultNavigator
        Parameters:
        obj - the processing instruction
        Returns:
        the target of the processing instruction
        Throws:
        java.lang.ClassCastException - if obj is not a processing instruction
      • getProcessingInstructionData

        public java.lang.String getProcessingInstructionData​(java.lang.Object obj)
        Get the data of a processing instruction node.
        Specified by:
        getProcessingInstructionData in interface Navigator
        Overrides:
        getProcessingInstructionData in class DefaultNavigator
        Parameters:
        obj - the processing instruction
        Returns:
        the target of the processing instruction
        Throws:
        java.lang.ClassCastException - if obj is not a processing instruction
      • getElementById

        public java.lang.Object getElementById​(java.lang.Object object,
                                               java.lang.String elementId)
        Returns the element whose ID is given by elementId. If no such element exists, returns null. Attributes with the name "ID" are not of type ID unless so defined. Attribute types are only known if when the parser understands DTD's or schemas that declare attributes of type ID. When JAXP is used, you must call setValidating(true) on the DocumentBuilderFactory.
        Specified by:
        getElementById in interface Navigator
        Overrides:
        getElementById in class DefaultNavigator
        Parameters:
        object - a node from the document in which to look for the id
        elementId - id to look for
        Returns:
        element whose ID is given by elementId, or null if no such element exists in the document or if the implementation does not know about attribute types
        Throws:
        java.lang.ClassCastException - if object is not an org.w3c.dom.Node object
        See Also:
        DocumentBuilderFactory