}
  public int nextNode()  {   if (m_foundLast)      return DTM.NULL;        // If the cache is on, and the node has already been found, then     // just return from the list.    NodeSetDTM m_cachedNodes = getCachedNodes();        // We are not using the NodeSetDTM methods getCurrentPos() and nextNode()    // in this case because the nodeset is not cloned and therefore    // the positions it indicates may not be associated with the     // current iterator.    if ((null != m_cachedNodes)            && (m_next < m_cachedNodes.size()))            {      int next = m_cachedNodes.elementAt(m_next);       this.setCurrentPos(++m_next);       m_lastFetched = next;            return next;    }        int next = DTM.NULL;           if ( m_ki.getLookForMoreNodes())     {      ((KeyWalker)m_ki.getFirstWalker()).m_lookupKey = m_lookupKey;      next = m_ki.nextNode();            }        if (DTM.NULL != next)    {        m_lastFetched = next;      this.setCurrentPos(++m_next);      return next;    }    else      m_foundLast = true;                              m_lastFetched = DTM.NULL;    return DTM.NULL;  }