code: public static Predicate<? super Dynamic> hasElementName(String elementName) {
          final String[] nsKey = elementName.split(NS_INDICATOR);
  
          return element -> {
              if (!(element instanceof XmlDynamic)) return false;
  
              String simpleName = elementName;
              if (nsKey.length == 2) {
                  String namespace = nsKey[0];
                  String elNamespace = ((XmlDynamic) element).inner.getNamespaceURI();
                  if (NONE_NAMESPACE.equals(namespace)) {
                      if (elNamespace != null) return false;
                  }
                  else if (!namespace.equals(elNamespace)) return false;
                  simpleName = nsKey[1];
              }
  
              String key = element.key().asString();
              if (key.endsWith("]"))
                  key = key.substring(0, key.lastIndexOf("["));
  
              return key.equalsIgnoreCase(simpleName);
          };
      }
docs: Predicate for an xml element's name as it appears in the xml itself (case insensitive)
  Inside the xml dynamic multiple elements with the same names have unique suffices ie
  <root>
  <child>1</child>
  <child>2</child>
  </root>
  the 'child' elements have internal names 'child' and 'child[1]' a predicate
  {@code dynamic -> dynamic.key().asString().equals("child")} would only match the first
  
  {@code hasElementName("child")} matches both
  
  @param elementName xml element name
  @return predicate to match XmlDynamic instances of elements with input name