/** * Start a depth-first traverse of the root and all of its descendants. * @param visitor Node visitor. * @param root the root node point to traverse. */ public static void traverse(NodeVisitor visitor, Node root) { Node node = root; int depth = 0; while (node != null) { visitor.head(node, depth); if (node.childNodeSize() > 0) { node = node.childNode(0); depth++; } else { while (node.nextSibling() == null && depth > 0) { visitor.tail(node, depth); node = node.parentNode(); depth--; } visitor.tail(node, depth); if (node == root) break; node = node.nextSibling(); } } }
node = node.parentNode(); depth--;
node = node.parentNode(); depth--; if (result == FilterResult.REMOVE)
public void traverse(Node root) { Node node = root; int depth = 0; while (node != null) { if (filter(node) || replace(node)) { node = node.nextSibling(); continue; } head(node, depth); if (node.childNodeSize() > 0) { node = node.childNode(0); depth++; } else { while (node.nextSibling() == null && depth > 0) { tail(node, depth); node = node.parentNode(); depth--; } tail(node, depth); if (node == root) { break; } node = node.nextSibling(); } } }