我正在尝试根据Python中的XSD验证XML文档。 我目前正在关注this教程。
我能够毫无问题地读取XML文件。但是,我需要为模式提供一种编码类型。否则,将导致'charmap' codec can't decode byte 0x81
错误。
with open(os.path.join(settings.MEDIA_ROOT, xsd_filename), 'r', encoding='utf-8') as schema_file:
schema_to_check = schema_file.read()
但是,当我添加编码etree时,无法解析文件的内容吗?返回的错误是Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.
xmlschema_doc = etree.parse(StringIO(schema_to_check))
我不确定我知道发生了什么事。从lxml网站上,我得到的印象是我应该保留编码,但是我不确定该教程为什么起作用而我的却不起作用?
我的Python版本是3.6.4。
谢谢。
答案 0 :(得分:0)
此后,我修改了代码以直接解析文件。这已经解决了我的问题,现在我可以验证我的模式。
代码修改:
with open(os.path.join(settings.MEDIA_ROOT, xsd_filename), 'r', encoding='utf-8') as f:
doc = etree.parse(f)