Class PrecedingAxisIterator

  • All Implemented Interfaces:
    java.util.Iterator

    public class PrecedingAxisIterator
    extends java.lang.Object
    implements java.util.Iterator

    Represents the XPath preceding axis. The "preceding axis contains all nodes in the same document as the context node that are before the context node in document order, excluding any ancestors and excluding attribute nodes and namespace nodes."

    This implementation of 'preceding' works like so: the preceding axis includes preceding siblings of this node and their descendants. Also, for each ancestor node of this node, it includes all preceding siblings of that ancestor, and their descendants. Finally, it includes the ancestor nodes themselves.

    The reversed descendant-or-self axes that are required are calculated using a stack of reversed 'child-or-self' axes. When asked for a node, it is always taken from a child-or-self axis. If it was the last node on that axis, the node is returned. Otherwise, this axis is pushed on the stack, and the process is repeated with the child-or-self of the node. Eventually this recurses down to the last descendant of any node, then works back up to the root.

    Most object models could provide a faster implementation of the reversed 'children-or-self' used here.

    Version:
    1.2b12
    • Constructor Summary

      Constructors 
      Constructor Description
      PrecedingAxisIterator​(java.lang.Object contextNode, Navigator navigator)
      Create a new preceding axis iterator.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private java.util.ListIterator childrenOrSelf​(java.lang.Object node)  
      boolean hasNext()
      Returns true if there are any preceding nodes remaining; false otherwise.
      java.lang.Object next()
      Returns the next preceding node.
      void remove()
      This operation is not supported.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.util.Iterator

        forEachRemaining
    • Field Detail

      • ancestorOrSelf

        private java.util.Iterator ancestorOrSelf
      • precedingSibling

        private java.util.Iterator precedingSibling
      • childrenOrSelf

        private java.util.ListIterator childrenOrSelf
      • stack

        private java.util.ArrayList stack
    • Constructor Detail

      • PrecedingAxisIterator

        public PrecedingAxisIterator​(java.lang.Object contextNode,
                                     Navigator navigator)
                              throws UnsupportedAxisException
        Create a new preceding axis iterator.
        Parameters:
        contextNode - the node to start from
        navigator - the object model specific navigator
        Throws:
        UnsupportedAxisException
    • Method Detail

      • hasNext

        public boolean hasNext()
        Returns true if there are any preceding nodes remaining; false otherwise.
        Specified by:
        hasNext in interface java.util.Iterator
        Returns:
        true if any preceding nodes remain; false otherwise
        See Also:
        Iterator.hasNext()
      • childrenOrSelf

        private java.util.ListIterator childrenOrSelf​(java.lang.Object node)
      • next

        public java.lang.Object next()
                              throws java.util.NoSuchElementException
        Returns the next preceding node.
        Specified by:
        next in interface java.util.Iterator
        Returns:
        the next preceding node
        Throws:
        java.util.NoSuchElementException - if no preceding nodes remain
        See Also:
        Iterator.next()
      • remove

        public void remove()
                    throws java.lang.UnsupportedOperationException
        This operation is not supported.
        Specified by:
        remove in interface java.util.Iterator
        Throws:
        java.lang.UnsupportedOperationException - always