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, List.of(children), Type.ELEM);
	}
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>}

<b>Reader definition</b>
{@snippet lang="java":
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 (subtree) 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
jenetics.xml/src/main/java/io/jenetics/xml/stream/Reader.java