Loads xml excel format files.

    Args:
        file_name: The name of the local file, or the holder for the
            extension type when the file_contents are supplied.
        file_contents: The file-like object holding contents of file_name.
            If left as None, then file_name is directly loaded.
        on_demand: Requests that a yielder be used in place of a full data
            copy (will be ignored).

def get_data_excel_xml(file_name, file_contents=None, on_demand=False):
    '''
    Loads xml excel format files.

    Args:
        file_name: The name of the local file, or the holder for the
            extension type when the file_contents are supplied.
        file_contents: The file-like object holding contents of file_name.
            If left as None, then file_name is directly loaded.
        on_demand: Requests that a yielder be used in place of a full data
            copy (will be ignored).
    '''
    # NOTE this method is inefficient and uses code that's not of the highest quality
    if file_contents:
        xml_file = BytesIO(file_contents)
    else:
        xml_file = file_name
    book = xmlparse.ParseExcelXMLFile(xml_file)
    row_builder = lambda s, r: list(s.row_values(r))
    return [XMLSheetYielder(book, index, row_builder) for index in range(len(book))]