def formatXML(parent):
    """                                                                                                       
    Recursive operation which returns a tree formated                                                         
    as dicts and lists.                                                                                       
    Decision to add a list is to find the 'List' word                                                         
    in the actual parent tag.                                                                                 
    """
    ret = {}
    if parent.items(): ret.update(dict(parent.items()))
    if parent.text: ret['__content__'] = parent.text
    if ('List' in parent.tag):
        ret['__list__'] = []
        for element in parent:
            if element.tag is not etree.Comment:
                ret['__list__'].append(formatXML(element))
    else:
        for element in parent:
            if element.tag is not etree.Comment:
                ret[element.tag] = formatXML(element)
    return ret
                                                                                                       
    Recursive operation which returns a tree formated                                                         
    as dicts and lists.                                                                                       
    Decision to add a list is to find the 'List' word                                                         
    in the actual parent tag.                                                                                 
    
recipes/Python/578244_LXML_Etree_XML_Object_basic/recipe-578244.py