iShares SP 500 ETF 的 Excel 文件有什么问题?

What's wrong with iShares SP 500 ETF's Excel file?

我正在尝试解析 iShares SP 500 ETF's Excel file,它看起来像这样:

<?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>
...

它似乎是一个旧的 XLS Excel 类型文件,但它是一个 XML 文件,但是 xml.etree.ElementTree 抱怨很多。

我试过:

import xml.etree.ElementTree as ET
tree = ET.parse(file_name)

并使用编码:

import xml.etree.ElementTree as ET
tree = ET.parse(file_name, parser=ET.XMLParser(recover=True))
import xml.etree.ElementTree as ET
tree = ET.parse(file_name, parser=ET.XMLParser(encoding='utf-8'))

错误:

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 1
rb = xlrd.open_workbook(file_name, encoding_override='utf-8')
print(rb)

错误:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\xef\xbb\xbf\xef\xbb\xbf<?'

但是 none 似乎完全没有用...有人可以指导我正确的方向吗?

您的“XML”文件不是well-formed:

  1. 在XML声明之前有两个BOM字符。

    要删除(至少)一个,请参阅Convert UTF-8 with BOM to UTF-8 with no BOM in Python

  2. 删除第 43 行的 & 或将其更改为 &amp;

    <ss:Data ss:Type="String">iShares Core S&P 500 ETF</ss:Data>
                                            ^
    
  3. 第 117,188 行的 & 同上。

如果不进行上述修复,您的文件将无法解析为 XML(因为从技术上讲它不是)。

经过以上修复后,您将可以解析为XML,Excel将可以打开:

另见

  • Error: The processing instruction target matching "[xX][mM][lL]" is not allowed