Class DocumentNavigator
- java.lang.Object
-
- org.jaxen.DefaultNavigator
-
- org.jaxen.dom.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
DocumentNavigator.AttributeIterator
An iterator over an attribute list.(package private) class
DocumentNavigator.NodeIterator
A generic iterator over DOM nodes.
-
Field Summary
Fields Modifier and Type Field Description private static long
serialVersionUID
private static DocumentNavigator
SINGLETON
-
Constructor Summary
Constructors Constructor Description DocumentNavigator()
Default constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.Iterator
getAttributeAxisIterator(java.lang.Object contextNode)
Get an iterator over all attributes.java.lang.String
getAttributeName(java.lang.Object attribute)
Get the local name of an attribute.java.lang.String
getAttributeNamespaceUri(java.lang.Object attribute)
Get the namespace URI of an attribute.java.lang.String
getAttributeQName(java.lang.Object attribute)
Get the qualified name of an attribute.java.lang.String
getAttributeStringValue(java.lang.Object object)
Get the string value of an attribute node.java.util.Iterator
getChildAxisIterator(java.lang.Object contextNode)
Get an iterator over all of this node's children.java.lang.String
getCommentStringValue(java.lang.Object object)
Get the string value of a comment node.java.lang.Object
getDocument(java.lang.String uri)
Use JAXP to load a namespace aware document from a given URI.java.lang.Object
getDocumentNode(java.lang.Object contextNode)
Get the top-level document node.java.lang.Object
getElementById(java.lang.Object object, java.lang.String elementId)
Returns the element whose ID is given by elementId.java.lang.String
getElementName(java.lang.Object element)
Get the local name of an element.java.lang.String
getElementNamespaceUri(java.lang.Object element)
Get the namespace URI of an element.java.lang.String
getElementQName(java.lang.Object element)
Get the qualified name of an element.java.lang.String
getElementStringValue(java.lang.Object object)
Get the string value of an element node.java.util.Iterator
getFollowingAxisIterator(java.lang.Object contextNode)
Get an iterator over all following nodes, depth-first.java.util.Iterator
getFollowingSiblingAxisIterator(java.lang.Object contextNode)
Get an iterator over all following siblings.static Navigator
getInstance()
Get a constant DocumentNavigator for efficiency.java.util.Iterator
getNamespaceAxisIterator(java.lang.Object contextNode)
Get an iterator over all declared namespaces.java.lang.String
getNamespacePrefix(java.lang.Object object)
Get the prefix value of a namespace node.java.lang.String
getNamespaceStringValue(java.lang.Object object)
Get the string value of a namespace node.java.util.Iterator
getParentAxisIterator(java.lang.Object contextNode)
Get a (single-member) iterator over this node's parent.java.lang.Object
getParentNode(java.lang.Object child)
Return the XPath parent of the supplied DOM node.java.util.Iterator
getPrecedingSiblingAxisIterator(java.lang.Object contextNode)
Get an iterator over all preceding siblings.java.lang.String
getProcessingInstructionData(java.lang.Object obj)
Get the data of a processing instruction node.java.lang.String
getProcessingInstructionTarget(java.lang.Object obj)
Get the target of a processing instruction node.private java.lang.StringBuffer
getStringValue(org.w3c.dom.Node node, java.lang.StringBuffer buffer)
Construct a node's string value recursively.java.lang.String
getTextStringValue(java.lang.Object object)
Get the string value of text.boolean
isAttribute(java.lang.Object object)
Test if a node is an attribute.boolean
isComment(java.lang.Object object)
Test if a node is a comment.boolean
isDocument(java.lang.Object object)
Test if a node is a top-level document.boolean
isElement(java.lang.Object object)
Test if a node is an element.boolean
isNamespace(java.lang.Object object)
Test if a node is a namespace.boolean
isProcessingInstruction(java.lang.Object object)
Test if a node is a processing instruction.boolean
isText(java.lang.Object object)
Test if a node is plain text.XPath
parseXPath(java.lang.String xpath)
Returns a parsed form of the given XPath string, which will be suitable for queries on DOM documents.java.lang.String
translateNamespacePrefixToUri(java.lang.String prefix, java.lang.Object element)
Translate a namespace prefix to a URI.-
Methods inherited from class org.jaxen.DefaultNavigator
getAncestorAxisIterator, getAncestorOrSelfAxisIterator, getDescendantAxisIterator, getDescendantOrSelfAxisIterator, getNodeType, getPrecedingAxisIterator, getSelfAxisIterator
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
SINGLETON
private static final DocumentNavigator SINGLETON
-
-
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 interfaceNavigator
- Overrides:
getChildAxisIterator
in classDefaultNavigator
- 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 interfaceNavigator
- Overrides:
getParentAxisIterator
in classDefaultNavigator
- Parameters:
contextNode
- the context node for the parent axis- Returns:
- a possibly-empty iterator (not null)
-
getParentNode
public java.lang.Object getParentNode(java.lang.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 interfaceNavigator
- Overrides:
getParentNode
in classDefaultNavigator
- Parameters:
child
- the child node- Returns:
- the parent of the specified node; or null if the node does not have a parent
- See Also:
Navigator.isDocument(java.lang.Object)
,Navigator.isElement(java.lang.Object)
-
getFollowingSiblingAxisIterator
public java.util.Iterator getFollowingSiblingAxisIterator(java.lang.Object contextNode)
Get an iterator over all following siblings.- Specified by:
getFollowingSiblingAxisIterator
in interfaceNavigator
- Overrides:
getFollowingSiblingAxisIterator
in classDefaultNavigator
- Parameters:
contextNode
- the context node for the sibling iterator- Returns:
- a possibly-empty iterator (not null)
-
getPrecedingSiblingAxisIterator
public java.util.Iterator getPrecedingSiblingAxisIterator(java.lang.Object contextNode)
Get an iterator over all preceding siblings.- Specified by:
getPrecedingSiblingAxisIterator
in interfaceNavigator
- Overrides:
getPrecedingSiblingAxisIterator
in classDefaultNavigator
- Parameters:
contextNode
- the context node for the preceding sibling 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 interfaceNavigator
- Overrides:
getFollowingAxisIterator
in classDefaultNavigator
- 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 interfaceNavigator
- Overrides:
getAttributeAxisIterator
in classDefaultNavigator
- 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 anxmlns:pre="http://www.b.com"
attribute; then only one of the namespaces will be counted. This will be the intrinsic namespace of theElement
orAttr
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 andpre:bar
in the http://www.b.com/ namespace--it is undefined which namespace will be returned.- Specified by:
getNamespaceAxisIterator
in interfaceNavigator
- Overrides:
getNamespaceAxisIterator
in classDefaultNavigator
- 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
-
getDocumentNode
public java.lang.Object getDocumentNode(java.lang.Object contextNode)
Get the top-level document node.- Specified by:
getDocumentNode
in interfaceNavigator
- Overrides:
getDocumentNode
in classDefaultNavigator
- Parameters:
contextNode
- any node in the document- Returns:
- the root node
- See Also:
Navigator.isDocument(Object)
-
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
andxmlns: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 nodebuffer
- 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 interfaceNavigator
- Overrides:
translateNamespacePrefixToUri
in classDefaultNavigator
- Parameters:
prefix
- the namespace prefixelement
- 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 interfaceNavigator
- Overrides:
getDocument
in classDefaultNavigator
- 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 interfaceNavigator
- Overrides:
getProcessingInstructionTarget
in classDefaultNavigator
- 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 interfaceNavigator
- Overrides:
getProcessingInstructionData
in classDefaultNavigator
- 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 callsetValidating(true)
on the DocumentBuilderFactory.- Specified by:
getElementById
in interfaceNavigator
- Overrides:
getElementById
in classDefaultNavigator
- Parameters:
object
- a node from the document in which to look for the idelementId
- 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 anorg.w3c.dom.Node
object- See Also:
DocumentBuilderFactory
-
-