I downloaded some excel xml from the web and try to parse it. I tried many solutions and none of them work, for example using xlrd, xml parse, elementTree or BeautifullSoup. Here is what the xml looks like
<?xml version="1.0"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Styles>
<ss:Style ss:ID="Default">
<ss:Alignment ss:Horizontal="Left"/>
</ss:Style>
<ss:Style ss:ID="wraptext">
<ss:Alignment ss:Horizontal="Left" ss:WrapText="1"/>
<ss:Font ss:Italic="1"/>
</ss:Style>
<ss:Style ss:ID="disclaimer">
<ss:Alignment ss:Vertical="Top" ss:WrapText="1"/>
<ss:Font ss:Italic="1"/>
</ss:Style>
<ss:Style ss:ID="DefaultHyperlink">
<ss:Alignment ss:Vertical="Center" ss:WrapText="1"/>
<ss:Font ss:Color="#0000FF" ss:Underline="Single" />
</ss:Style>
<ss:Style ss:ID="headerstyle">
<ss:Font ss:Bold="1" />
</ss:Style>
<ss:Style ss:ID="Date">
<ss:NumberFormat ss:Format="dd\-mmm\-yyyy"/>
</ss:Style>
<ss:Style ss:ID="Left">
<ss:Alignment ss:Horizontal="Left"/>
<ss:NumberFormat ss:Format="Standard"/>
</ss:Style>
<ss:Style ss:ID="Right">
<ss:Alignment ss:Horizontal="Right"/>
<ss:NumberFormat ss:Format="Standard"/>
</ss:Style>
</ss:Styles>
<ss:Worksheet ss:Name="Holdings">
<ss:Table>
<ss:Row>
<ss:Cell ss:StyleID="Left">
<ss:Data ss:Type="String">06-Oct-2020</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell ss:StyleID="Left">
<ss:Data ss:Type="String">iShares Russell Top 200 Value ETF</ss:Data>
</ss:Cell>
</ss:Row>
.
.
.
Or you can download the full xml here
Ultimately I will need to convert the file into DataFrame, but now I am open to any solutions, maybe convert to csv first. Can anyone help?
import xml.etree.ElementTree as et response = requests.get(url, headers=headers) parsed = et.parse(str(response.text)) print(parsed.getroot())soup = BeautifulSoup(str(response.text), 'xml') workbook = [] for sheet in soup.findAll('Worksheet'): sheet_as_list = [] for row in sheet.findAll('Row'): row_as_list = [] for cell in row.findAll('Cell'): row_as_list.append(cell.Data.text) sheet_as_list.append(row_as_list) workbook.append(sheet_as_list) print(len(workbook))it prints 0