Python XML 针对 Schema lxml 的验证

Python XML validation against Schema lxml

我正在尝试根据 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。

提前致谢。

我已经修改了我的代码以直接解析文件。这解决了我的问题,现在我可以验证我的模式了。

代码修改:

with open(os.path.join(settings.MEDIA_ROOT, xsd_filename), 'r', encoding='utf-8') as f:                                                
     doc = etree.parse(f)