我正在使用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。