如何防止suds通过网络获取xml.xsd?

时间:2011-09-21 13:23:46

标签: python soap suds

我正在使用Python的suds库,它试图通过网络获取xml.xsd。不幸的是,w3c服务器由于像我这样的其他程序而受到重创,通常无法提供文档。

如何拦截suds的URL提取以始终获取此文件的本地副本,即使不必在第一次成功将其下载到长期缓存中?

2 个答案:

答案 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内容。

相关问题