Package org.jaxen.dom

Class DocumentNavigator

java.lang.Object
org.jaxen.DefaultNavigator
org.jaxen.dom.DocumentNavigator
All Implemented Interfaces:
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.

Author:
David Megginson, James Strachan
See Also:
  • Constructor Details

    • DocumentNavigator

      public DocumentNavigator()
      Default constructor.
  • Method Details

    • getInstance

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

      public Iterator getChildAxisIterator(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 Iterator getParentAxisIterator(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)
    • getParentNode

      public Object getParentNode(Object child)
      Return the XPath parent of the supplied DOM node. XPath has slightly different definition of parent than DOM does. In particular, the parent of an attribute is not null.
      Specified by:
      getParentNode in interface Navigator
      Overrides:
      getParentNode in class DefaultNavigator
      Parameters:
      child - the child node
      Returns:
      the parent of the specified node; or null if the node does not have a parent
      See Also:
    • getFollowingSiblingAxisIterator

      public Iterator getFollowingSiblingAxisIterator(Object contextNode)
      Get an iterator over all following siblings.
      Specified by:
      getFollowingSiblingAxisIterator in interface Navigator
      Overrides:
      getFollowingSiblingAxisIterator in class DefaultNavigator
      Parameters:
      contextNode - the context node for the sibling iterator
      Returns:
      a possibly-empty iterator (not null)
    • getPrecedingSiblingAxisIterator

      public Iterator getPrecedingSiblingAxisIterator(Object contextNode)
      Get an iterator over all preceding siblings.
      Specified by:
      getPrecedingSiblingAxisIterator in interface Navigator
      Overrides:
      getPrecedingSiblingAxisIterator in class DefaultNavigator
      Parameters:
      contextNode - the context node for the preceding sibling axis
      Returns:
      a possibly-empty iterator (not null)
    • getFollowingAxisIterator

      public Iterator getFollowingAxisIterator(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 Iterator getAttributeAxisIterator(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 Iterator getNamespaceAxisIterator(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(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:
    • getDocumentNode

      public Object getDocumentNode(Object contextNode)
      Get the top-level document node.
      Specified by:
      getDocumentNode in interface Navigator
      Overrides:
      getDocumentNode in class DefaultNavigator
      Parameters:
      contextNode - any node in the document
      Returns:
      the root node
      See Also:
    • getElementNamespaceUri

      public String getElementNamespaceUri(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 String getElementName(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 String getElementQName(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 String getAttributeNamespaceUri(Object attribute)
      Get the namespace URI of an attribute.
      Parameters:
      attribute - the target node
      Returns:
      the namespace name of the specified node
    • getAttributeName

      public String getAttributeName(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 String getAttributeQName(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(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(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(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(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(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(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(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 String getElementStringValue(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
    • getAttributeStringValue

      public String getAttributeStringValue(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 String getTextStringValue(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 String getCommentStringValue(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 String getNamespaceStringValue(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 String getNamespacePrefix(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 String translateNamespacePrefixToUri(String prefix, 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:
    • getDocument

      public Object getDocument(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 String getProcessingInstructionTarget(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:
      ClassCastException - if obj is not a processing instruction
    • getProcessingInstructionData

      public String getProcessingInstructionData(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:
      ClassCastException - if obj is not a processing instruction
    • getElementById

      public Object getElementById(Object object, 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:
      ClassCastException - if object is not an org.w3c.dom.Node object
      See Also: