python lxml:从缓冲区导入XSD?

hoo

我正在使用来自python的LXML来验证具有匹配XSD的XML。
该XSD导入了第二个“通用” XSD,其中包括一些通用定义。
问题是这些XSD在本地不作为文件存在。它们只是我在内存中保留的缓冲区,但是当XSD保留它<import><redefine>它在文件系统的当前目录中寻找导入的文件时。

有没有办法使它不这样做?也许提前提供进口的XSD?

LXML使用libxml2和libxslt进行解析。
导入的XSD文件的打开源自libxml2代码的深入内部,并且不经过python的文件处理,因此,覆盖open()无效。似乎libxml2没有任何工具为其提供文件解析器。它只是fopen()直接调用

因此,解决方案可能需要更高的级别,或者覆盖名称空间或类似的名称?

克休斯

与其通过open()/fopen()覆盖或更改源名称空间来解决问题,不如考虑使用XML Catalogs自定义URI解析器

XML目录使您可以控制:

  1. 将外部实体的公共标识符和/或系统标识符映射到URI引用。
  2. 将资源(名称空间名称,样式表,图像等)的URI引用映射到另一个URI引用。

您可以在此处阅读如何将XML目录与libxml2一起使用

虽然XML目录将不直接支持基于内存的XSD,但您可能能够找到比低级方法更好的替代open()/fopen()方法。

但是,更有希望的方法可能是编写自定义URI解析器lxml文档中提供了一个示例自定义URI解析器

>>> from lxml import etree

>>> class DTDResolver(etree.Resolver):
...     def resolve(self, url, id, context):
...         print("Resolving URL '%s'" % url)
...         return self.resolve_string(
...             '<!ENTITY myentity "[resolved text: %s]">' % url, context)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python从缓冲区读取数据

来自分类Dev

从缓冲区读取Python 2.6

来自分类Dev

Python:从缓冲区播放视频文件

来自分类Dev

将赋值导入模块重新/期望的字符串或缓冲区Python中,

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

写入新的Python缓冲区接口

来自分类Dev

Python,Macports和缓冲区问题

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

增加Python的标准缓冲区大小

来自分类Dev

Python Poster缓冲区大小

来自分类Dev

Python:清除标准输入缓冲区

来自分类Dev

来自缓冲区的 ctypes - Python

来自分类Dev

ReadAsync从缓冲区获取数据

来自分类Dev

Python TypeError:导入文本文件时需要字符串或其他字符缓冲区对象

来自分类Dev

Python缓冲区(long(-10)):“ TypeError:预期的缓冲区对象”

来自分类Dev

两个不同的缓冲区,相同的python shell

来自分类Dev

使用协议缓冲区的Python项目,部署问题

来自分类Dev

Python异步缓冲区和进程数据

来自分类Dev

Python线程-内部缓冲区错误-内存不足

来自分类Dev

用Python解压缩缓冲区?

来自分类Dev

使用CFFI在Python中创建CData类型的缓冲区

来自分类Dev

如何在Python中合并多个缓冲区对象?

来自分类Dev

Python 3-Pycrypto-只读固定缓冲区

来自分类Dev

Python 3中的协议缓冲区-NotImplementedError

来自分类Dev

Python TypeError:预期的字符串或缓冲区

来自分类Dev

Python 3-Pycrypto-只读固定缓冲区

来自分类Dev

TypeError:预期的字符串或缓冲区 Python

来自分类Dev

Python TypeError:“ str”不支持缓冲区接口

来自分类Dev

Python线程-内部缓冲区错误-内存不足