public class XpathNodeTracker extends java.lang.Object implements XMLConstants
The tracker has the concept of a level which corresponds to the
depth of the tree it has visited. The indent
method creates a new level, making the tracker walk prepare to walk
down the tree, the outdent
method moves one level
up and any information about the previous level is discarded.
At each level there may be a current Node - the last one for
which visitedNode
or visited
has been called - and maybe a current attribute at this node - the
last one for which visitedAttribute
or
visited
has been called. Attributes are assumed
to be at the same level as the nodes they belong to.
Modifier and Type | Class and Description |
---|---|
private class |
XpathNodeTracker.TrackingEntry
Holds node tracking details - one instance is used for each
level of indentation in a DOM
Provides reference between a String-ified Node value and the
xpath index of that value
|
Modifier and Type | Field and Description |
---|---|
private XPathContext |
ctx |
private java.util.LinkedList<XpathNodeTracker.TrackingEntry> |
levels |
CLOSE_NODE, END_CDATA, END_COMMENT, END_PROCESSING_INSTRUCTION, NULL_NS_URI, OPEN_END_NODE, OPEN_START_NODE, START_CDATA, START_COMMENT, START_DOCTYPE, START_PROCESSING_INSTRUCTION, W3C_XML_SCHEMA_INSTANCE_NO_NAMESPACE_SCHEMA_LOCATION_ATTR, W3C_XML_SCHEMA_INSTANCE_NS_URI, W3C_XML_SCHEMA_INSTANCE_SCHEMA_LOCATION_ATTR, W3C_XML_SCHEMA_NS_URI, XML_DECLARATION, XMLNS_PREFIX, XPATH_ATTRIBUTE_IDENTIFIER, XPATH_CHARACTER_NODE_IDENTIFIER, XPATH_COMMENT_IDENTIFIER, XPATH_NODE_INDEX_END, XPATH_NODE_INDEX_START, XPATH_PROCESSING_INSTRUCTION_IDENTIFIER, XPATH_SEPARATOR
Constructor and Description |
---|
XpathNodeTracker()
Simple constructor
|
Modifier and Type | Method and Description |
---|---|
void |
clearTrackedAttribute()
Call after processing attributes of an element and turning to
compare the child nodes.
|
private static java.lang.String |
getNodeName(org.w3c.dom.Node n)
extracts the local name of a node.
|
void |
indent()
Call before examining child nodes one level of indentation into DOM
|
private void |
newLevel() |
void |
outdent()
Call after examining child nodes, ie before returning back one
level of indentation from DOM.
|
void |
preloadChildList(java.util.List nodeList)
Preload the items in a List by visiting each in turn
Required for pieces of test XML whose node children can be visited
out of sequence by a DifferenceEngine comparison
|
private void |
preloadChildren(java.lang.Iterable<org.w3c.dom.Node> nodeList)
Preload the nodes by visiting each in turn.
|
void |
preloadNodeList(org.w3c.dom.NodeList nodeList)
Preload the items in a NodeList by visiting each in turn
Required for pieces of test XML whose node children can be visited
out of sequence by a DifferenceEngine comparison
|
void |
reset()
Clear state data.
|
java.lang.String |
toXpathString() |
void |
visited(org.w3c.dom.Node node)
Call when visiting a node whose xpath location needs tracking
|
protected void |
visitedAttribute(java.lang.String visited)
Invoked by
visited when visiting an attribute node. |
protected void |
visitedNode(org.w3c.dom.Node visited,
java.lang.String value)
Invoked by
visited when visited is an element,
text, CDATA section, comment or processing instruction. |
private XPathContext ctx
private final java.util.LinkedList<XpathNodeTracker.TrackingEntry> levels
public void reset()
public void indent()
private void newLevel()
public void clearTrackedAttribute()
public void outdent()
public void visited(org.w3c.dom.Node node)
Delegates to visitedAttribute
for
attribute nodes, visitedNode
for elements,
texts, CDATA sections, comments or processing instructions and
ignores any other type of node.
node
- the Node being visited - must not be null.protected void visitedNode(org.w3c.dom.Node visited, java.lang.String value)
visited
when visited is an element,
text, CDATA section, comment or processing instruction.visited
- the visited node - Unit tests call this with
null values, so it is not safe to assume it will never be null.
It will never be null when the visited
method
delegates here.value
- the local name of the element or an XPath
identifier matching the type of node.protected void visitedAttribute(java.lang.String visited)
visited
when visiting an attribute node.visited
- the local name of the attribute.public void preloadNodeList(org.w3c.dom.NodeList nodeList)
Makes the nodes of this list known as nodes that are visitable at the current level and makes the last child node the current node as a side effect.
nodeList
- the items to preloadpublic void preloadChildList(java.util.List nodeList)
Makes the nodes of this list known as nodes that are visitable at the current level and makes the last child node the current node as a side effect.
nodeList
- the items to preloadpublic java.lang.String toXpathString()
private static java.lang.String getNodeName(org.w3c.dom.Node n)
private void preloadChildren(java.lang.Iterable<org.w3c.dom.Node> nodeList)
Makes the nodes of this list known as nodes that are visitable at the current level and makes the last child node the current node as a side effect.
nodeList
- the items to preload