我如何防止泡沫从抓取xml.通过网络的XSD



我正在使用Python的suds库,它试图获取xml。通过网络的XSD。不幸的是,w3c服务器由于其他程序(如我的程序)而瘫痪,通常无法提供文档。

我如何拦截suds的URL抓取总是抓取这个文件的本地副本,即使没有下载到一个长期缓存成功的第一次?

获取xml的问题。xsd与"http://www.w3.org/XML/1998/namespace"名称空间有关,这是大多数wsdl所必需的。此命名空间默认映射为http://www.w3.org/2001/xml.xsd。

您可以覆盖此命名空间的位置绑定,以指向本地文件:

from suds.xsd.sxbasic import Import
file_url = 'file://<path to xml.xsd>'
Import.bind('http://www.w3.org/XML/1998/namespace', file_url)

suds库有一个类suds.store.DocumentStore,它将绑定的XML保存在uri ->文本字典中。可以这样修补:

suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = 
    file('xml.xsd', 'r').read()

不幸的是,这不起作用,因为DocumentStore只尊重suds://协议的请求。只需要一个补丁,你就能搞定了。

也可以覆盖传递给suds的Client()Cache()实例,但是缓存处理基于Python的hash()的数字id,并且不获取其内容的url。

最新更新