let p = concat l: The pull functions contained in the list l are
concatenated, and a new pull function p is created that pulls from
the functions of the list in turn (when one function indicates
the end of the events, it is continued with the next function in the
list).

create_element_node ~name_pool_for_attribute_values
~position ~valcheck ~att_values spec dtd eltype
att_list:
Creates a new element node from the exemplar(s) contained in
spec: The new node will be connected to the passed dtd., The new node will have the element type eltype., The attributes of the new node will be the concatenation of
att_list and att_values; att_list passes attribute values
as strings while att_values passes attribute values as
type att_value, The source position is set to ~position (if passed), The ~name_pool_for_attribute_values will be used, if passed., If ~valcheck = true (the default), the attribute list is
immediately validated. If ~valcheck = false, the validation
is left out; in this case you can pass any element type and
and any attributes, and it does not matter whether and how
they are declared.
Even in well-formedness mode, it is ok to pass valcheck=true
as this mode is implemented by weakening the validation
constraints in the DTD object.

This filter checks whether character data between elements in a
"regexp" or "non-PCDATA mixed" content model consists
only of whitespace, and, removes these whitespace characters from the event stream.
If the check fails, a WF_Error will be raised.

strip_whitespace ~force ~left ~right ~delete_empty_nodes startnode:
Modifies the passed tree in-place by the following rules: In general, whitespace stripping is not applied to nodes inside
an xml:space="preserve" region, unless ~force:true is passed
to the function (default is ~force:false). Only if whitespace
stripping is allowed, the following rules are carried out.
Note that the detection of regions with preserved whitespace takes
the parent nodes of the passed startnode into account., If applied to a data node, whitespace at the beginning of the node
is removed according to ~left, and whitespace at the end of the node
is removed according to ~right., If applied to an element, whitespace at the beginning of the first
data subnode is removed according to ~left, and whitespace at the end
of the last data subnode is removed according to ~right. Furthermore,
these rules are recursively applied to all subelements (but not to
other node types)., If applied to the super root node, this node is treated as if it
were an element., Whitespace of other node types is left as-is, as whitespace occuring
in attributes., Option ~delete_empty_nodes (default true):
If data nodes become empty after removal of whitespace, they are
deleted from the XML tree.
Defaults: ~force:false, ~left:`Disabled, ~right:`Disabled