我正在使用Python的suds库,它试图通过网络获取xml.xsd。不幸的是,w3c服务器由于像我这样的其他程序而受到重创,通常无法提供文档。
如何拦截suds的URL提取以始终获取此文件的本地副本,即使不必在第一次成功将其下载到长期缓存中?
答案 0 :(得分:4)
获取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)
答案 1 :(得分:0)
suds库有一个类suds.store.DocumentStore
,它在一个uri中包含捆绑的XML - &gt;文字字典。它可以像这样打补丁:
suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = \
file('xml.xsd', 'r').read()
不幸的是,这不起作用,因为DocumentStore
仅尊重suds://
协议的请求。之后有一个猴子补丁你正在做生意。
也可以覆盖传递给你的suds Cache()
的{{1}}实例,但是缓存处理基于Python的Client()
的数字ID并且没有得到它的URL内容。