针对Schema lxml的Python XML验证

时间:2018-07-05 12:26:34

标签: python django python-3.x 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。

谢谢。

1 个答案:

答案 0 :(得分:0)

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

代码修改:

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