given an Salt XML element, returns a corresponding `SaltElement` class
    instance, i.e. a SaltXML `SToken` node will be converted into a
    `TokenNode`.

    Parameters
    ----------
    element : lxml.etree._Element
        an `etree._Element` is the XML representation of a Salt element,
        e.g. a single 'nodes' or 'edges' element
    element_id : int
        the index of element (used to connect edges to nodes)
    doc_id : str
        the ID of the SaltXML document

    Returns
    -------
    salt_element : SaltElement
        an instance of a `SaltElement` subclass instance, e.g. a `TokenNode`,
        `TextualRelation` or `SaltLayer`

def create_class_instance(element, element_id, doc_id):
    """
    given an Salt XML element, returns a corresponding `SaltElement` class
    instance, i.e. a SaltXML `SToken` node will be converted into a
    `TokenNode`.

    Parameters
    ----------
    element : lxml.etree._Element
        an `etree._Element` is the XML representation of a Salt element,
        e.g. a single 'nodes' or 'edges' element
    element_id : int
        the index of element (used to connect edges to nodes)
    doc_id : str
        the ID of the SaltXML document

    Returns
    -------
    salt_element : SaltElement
        an instance of a `SaltElement` subclass instance, e.g. a `TokenNode`,
        `TextualRelation` or `SaltLayer`
    """
    xsi_type = get_xsi_type(element)
    element_class = XSI_TYPE_CLASSES[xsi_type]
    return element_class.from_etree(element)