我试图读取spss文件后面的xml,我想从etree移到objectify。在
如何将下面的函数转换为返回objectify对象?我之所以这么做是因为objectifyxml对象对我(作为一个新手)来说更容易操作,因为它更像python。在
def get_etree(path_file):
from lxml import etree
with open(path_file, 'r+') as f:
xml_text = f.read()
recovering_parser = etree.XMLParser(recover=True)
xml = etree.parse(StringIO(xml_text), parser=recovering_parser)
return xml
我失败的尝试:
^{pr2}$但我得到一个错误:
lxml.etree.XMLSyntaxError: xmlns:mdm: 'http://www.spss.com/mr/dm/metadatamodel/Arc 3/2000-02-04' is not a valid URI
第一个最大的错误是将文件读入字符串并将该字符串馈送给XML解析器。在
Python将以默认的文件编码方式读取文件(除非您在调用
read()
时指定了编码),而且该步骤很可能会破坏除普通ASCII文件之外的任何内容。在XML文件有许多编码,您无法预测它们,而且您不应该对它们进行假设。XML文件用XML声明解决了这个问题。在
在读取文件的其余部分之前,XML解析器将读取这部分信息并正确配置自己。利用那个设施。不要将
open()
和read()
用于XML文件。幸运的是,lxml使它变得非常简单:
^{pr2}$以及
注:如果你真的,肯定地必须使用一个恢复解析器,那就好好想想。XML文件是一种数据结构。如果它被破坏(语法上无效,不完整,错误解码,你能说出它的名字),你真的想相信(根据定义未定义的)尝试读取它的结果还是你宁愿拒绝它并显示错误消息?在
我会做后者。使用恢复解析器可能会在以后导致严重的运行时错误。在
相关问题 更多 >
编程相关推荐