code: private final void getFormFields(Node parent, Map<String, String> formfields) {
          String method = "getFormFields(Node parent, Map formfields)";
          if (logger.isDebugEnabled()) {
              logger.debug(enter(method));
          }
          NodeList children = parent.getChildNodes();
          for (int i = 0; i < children.getLength(); i++) {
              Node child = children.item(i);
              String tag = child.getNodeName();
              if ("input".equalsIgnoreCase(tag)) {
                  NamedNodeMap attributes = child.getAttributes();
                  Node typeNode = attributes.getNamedItem("type");
                  String type = typeNode.getNodeValue();
                  Node nameNode = attributes.getNamedItem("name");
                  String name = nameNode.getNodeValue();
                  Node valueNode = attributes.getNamedItem("value");
                  String value = "";
                  if (valueNode != null) {
                      value = valueNode.getNodeValue();
                  }
                  if ("hidden".equalsIgnoreCase(type) && value != null) {
                      if (logger.isDebugEnabled()) {
                          logger.debug(format("capturing hidden fields", name, value));
                      }
                      formfields.put(name, value);
                  }
              }
              getFormFields(child, formfields);
          }
          if (logger.isDebugEnabled()) {
              logger.debug(exit(method));
          }
      }
docs: inner, recursive call