我需要帮助来理解为什么用xml.etree.ElementTree解析xml文件*会产生以下错误
*我的测试xml文件包含阿拉伯语字符。
任务:
打开并解析utf8_file.xml文件
我的第一次尝试:
将xml.etree.ElementTree导入为etree
使用codecs.open('utf8_file.xml','r',encoding='utf-8')作为utf8_文件:
xml_tree=etree.parse(utf8_文件)
结果1:
UnicodeEncodeError:“ascii”编解码器无法对236-238位置的字符进行编码:序号不在范围内(128)
我的第二次尝试:
将xml.etree.ElementTree导入为etree
使用codecs.open('utf8_file.xml','r',encoding='utf-8')作为utf8_文件:
xml\u string=etree.tostring(utf8\u文件,编码='utf-8',方法='xml')
xml\u tree=etree.fromstring(xml\u string)
结果2:
AttributeError:“文件”对象没有属性“getiterator”
请解释上述错误,并对可能的解决方案发表意见
将字节解码留给解析器;不要先解码:
将xml.etree.ElementTree导入为etree
打开('utf8_file.xml','r')作为xml_文件:
xml_tree=etree.parse(xml_文件)
XML文件必须在第一行中包含足够的信息,以便解析器进行解码。如果缺少标头,则解析器必须假定使用了UTF-8
因为保存此信息的是XML头,所以解析器负责执行所有解码
第一次尝试失败,因为Python试图再次对Unicode值进行编码,以便解析器能够按预期处理字节字符串。第二次尝试失败,因为etree.tostring()要求将已解析的树作为第一个参数,而不是unicode字符串