文件ElementTree开头的非法数据

时间:2015-07-29 18:59:44

标签: python xml elementtree

我正在尝试使用Python中的ElementTree库读取XML文件。我已将XML文件一直简化为单个根目录:

<ssf>
</ssf>

该文件的扩展名为&#34; .ssf&#34;

当我尝试使用ET.parse(文件)读取文件时,出现以下错误:

  

异常:第1行的语法错误:文件开头的非法数据

我不确定我错过了什么。

代码:

def ssf(ssf_path):
    tree = ET.parse(ssf_path);
    root = tree.getroot();

1 个答案:

答案 0 :(得分:0)

就我而言,文件开头的非法数据为BOM

您没有提到要使用哪个python。某些版本的python(在我的情况下为Ironpyhton)默认情况下不会以Unicode格式打开文本文件。因此,如果文件另存为unicode文件(开头是BOM),则open函数会将BOM读取为某些字符,而不是检测编码的标志。这样,您最终将获得无效的xml字符串!

这是解决问题的一种方法:打开文件并自己将其读取为字符串,然后解析该字符串:

import xml.etree.ElementTree
import io

path = '.\\file.ssf'
txt = ''
with io.open(path, 'r', encoding='utf-8') as o:
    txt = o.read()
root = xml.etree.ElementTree.fromstring(txt)