Package org.jsoup.select

Interface NodeVisitor

All Known Implementing Classes:
W3CDom.W3CBuilder
Functional Interface:
This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

@FunctionalInterface public interface NodeVisitor
Node visitor interface, used to walk the DOM, and visit each Node. Execute via traverse(Node) or Node.traverse(NodeVisitor). The traversal is depth-first.

This interface provides two methods, head(org.jsoup.nodes.Node, int) and tail(org.jsoup.nodes.Node, int). The head method is called when a node is first seen, and the tail method when all that node's children have been visited. As an example, head can be used to emit a start tag for a node, and tail to create the end tag. The tail method defaults to a no-op, so the head method is the FunctionalInterface.

Example:


 doc.body().traverse((node, depth) -> {
     switch (node) {
         case Element el     -> print(el.tag() + ": " + el.ownText());
         case DataNode data  -> print("Data: " + data.getWholeData());
         default             -> print(node.nodeName() + " at depth " + depth);
     }
 });
 
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    head(Node node, int depth)
    Callback for when a node is first visited.
    default void
    tail(Node node, int depth)
    Callback for when a node is last visited, after all of its descendants have been visited.
    default void
    traverse(Node root)
    Run a depth-first traverse of the root and all of its descendants.
  • Method Details

    • head

      void head(Node node, int depth)
      Callback for when a node is first visited.

      The node may be modified (e.g. Node.attr(String), replaced Node.replaceWith(Node)) or removed Node.remove(). If it's instanceOf Element, you may cast it to an Element and access those methods.

      Parameters:
      node - the node being visited.
      depth - the depth of the node, relative to the root node. E.g., the root node has depth 0, and a child node of that will have depth 1.
    • tail

      default void tail(Node node, int depth)
      Callback for when a node is last visited, after all of its descendants have been visited.

      This method has a default no-op implementation.

      Note that neither replacement with Node.replaceWith(Node) nor removal with Node.remove() is supported during tail().

      Parameters:
      node - the node being visited.
      depth - the depth of the node, relative to the root node. E.g., the root node has depth 0, and a child node of that will have depth 1.
    • traverse

      default void traverse(Node root)
      Run a depth-first traverse of the root and all of its descendants.
      Parameters:
      root - the initial node point to traverse.
      Since:
      1.21.1