def read_list_elem(root, tag, cls, fd):
    """
    Read all elements with the tag ``tag`` under XML element ``root``
    and return a list of objects of class ``cls``, created by calling
    ``cls.read_elem(elem, fd)``.

    This is a low-level function used internally by this library; you
    don't typically need to use it.
    """
    objects = []
    for elem in root.findall(tag):
        objects.append(cls.read_elem(elem, fd))
    return objects