code: public static <T> Reader<T> elem(
  		final Function<Object[], T> generator,
  		final String name,
  		final Reader<?>... children
  	) {
  		requireNonNull(name);
  		requireNonNull(generator);
  		Stream.of(requireNonNull(children)).forEach(Objects::requireNonNull);
  
  		return new ElemReader<>(name, generator, asList(children), Type.ELEM);
  	}
docs: Return a {@code Reader} for reading an object of type {@code T} from the
  XML element with the given {@code name}.
  
  <p>
  <b>XML</b>
  <pre> {@code <property name="size">1234<property>}</pre>
  
  <b>Reader definition</b>
  <pre>{@code
  final Reader<Property> reader =
  elem(
  v -> {
  final String name = (String)v[0];
  final Integer value = (Integer)v[1];
  return Property.of(name, value);
  },
  "property",
  attr("name"),
  text().map(Integer::parseInt)
  );
  }</pre>
  
  @param generator the generator function, which build the result object
  from the given parameter array
  @param name the name of the root (sub-tree) element
  @param children the child element reader, which creates the values
  forwarded to the {@code generator} function
  @param <T> the reader result type
  @return a node reader
  @throws NullPointerException if one of the given arguments is {@code null}
  @throws IllegalArgumentException if the given child readers contains more
  than one <em>text</em> reader