code: public static <V> Node<V> findNodeByPath(List<Node<V>> parents, String path) {
          checkArgNotNull(path, "path");
          if (parents != null && !parents.isEmpty()) {
              int separatorIndex = path.indexOf('/');
              String prefix = separatorIndex != -1 ? path.substring(0, separatorIndex) : path;
              int start = 0, step = 1;
              if (prefix.startsWith("last:")) {
                  prefix = prefix.substring(5);
                  start = parents.size() - 1;
                  step = -1;
              }
              for (int i = start; 0 <= i && i < parents.size(); i += step) {
                  Node<V> child = parents.get(i);
                  if (StringUtils.startsWith(child.getLabel(), prefix)) {
                      return separatorIndex == -1 ? child : findNodeByPath(child, path.substring(separatorIndex + 1));
                  }
              }
          }
          return null;
      }
docs: Returns the node underneath the given parents that matches the given path.
  See {@link #findNodeByPath(org.parboiled.Node, String)} )} for a description of the path argument.
  If the given collections of parents is null or empty or no node is found the method returns null.
  
  @param parents the parent Nodes to look through
  @param path    the path to the Node being searched for
  @return the Node if found or null if not found