def remove_range(cls, elem, end_elem, delete_end=True):
        """delete everything from elem to end_elem, including elem.
        if delete_end==True, also including end_elem; otherwise, leave it."""
        while elem is not None and elem != end_elem and end_elem not in elem.xpath("descendant::*"):
            parent = elem.getparent()
            nxt = elem.getnext()
            parent.remove(elem)
            if DEBUG == True:
                print(etree.tounicode(elem))
            elem = nxt
        if elem == end_elem:
            if delete_end == True:
                cls.remove(end_elem, leave_tail=True)
        elif elem is None:
            if parent.tail not in [None, '']:
                parent.tail = ''
            cls.remove_range(parent.getnext(), end_elem)
            XML.remove_if_empty(parent)
        elif end_elem in elem.xpath("descendant::*"):
            if DEBUG == True:
                print(elem.text)
            elem.text = ''
            cls.remove_range(elem.getchildren()[0], end_elem)
            XML.remove_if_empty(elem)
        else:
            print("LOGIC ERROR", file=sys.stderr)
def remove_range ( cls , elem , end_elem , delete_end = True ) : while elem is not None and elem != end_elem and end_elem not in elem . xpath ( "descendant::*" ) : parent = elem . getparent ( ) nxt = elem . getnext ( ) parent . remove ( elem ) if DEBUG == True : print ( etree . tounicode ( elem ) ) elem = nxt if elem == end_elem : if delete_end == True : cls . remove ( end_elem , leave_tail = True ) elif elem is None : if parent . tail not in [ None , '' ] : parent . tail = '' cls . remove_range ( parent . getnext ( ) , end_elem ) XML . remove_if_empty ( parent ) elif end_elem in elem . xpath ( "descendant::*" ) : if DEBUG == True : print ( elem . text ) elem . text = '' cls . remove_range ( elem . getchildren ( ) [ 0 ] , end_elem ) XML . remove_if_empty ( elem ) else : print ( "LOGIC ERROR" , file = sys . stderr )
delete everything from elem to end_elem, including elem.
        if delete_end==True, also including end_elem; otherwise, leave it.