// We get here if rootNode is an element and the current event is START_DOCUMENT
assert !visited;
node = rootNode;
return true;
} else if (node instanceof OMContainer && !visited) {
IContainer current = (IContainer)node;
OMNode firstChild = cache ? current.getFirstOMChild() : current.getFirstOMChildIfAvailable();
if (firstChild != null) {
node = firstChild;
visited = false;
return true;
} else if (node.isComplete()) {
visited = true;
return true;
} else {
return false;
}
} else if (node == rootNode) {
// We get here if rootNode is an element and the next event is END_DOCUMENT
node = null;
visited = true;
return true;
} else {
OMNodeEx current = (OMNodeEx)node;
OMNode nextSibling = cache ? current.getNextOMSibling() : current.getNextOMSiblingIfAvailable();
if (nextSibling != null) {
node = nextSibling;
visited = false;
return true;
} else {
OMContainer parent = current.getParent();
node = parent;
if (parent.isComplete() || parent.getBuilder() == null) { // TODO: review this condition
visited = true;
return true;
} else {