我想知道 PHP 或 Python 中是否有任何东西可以正确解析 WSDL 文件。例如我需要解析 http://www.onvif.org/ver10/media/wsdl/media.wsdl . PHP SOAP 扩展生成如下代码:
<ns1:GetStreamUri env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<param0 xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">StreamSetup</key>
<value xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">Stream</key>
<value xsi:type="xsd:string">RTP-Unicast</value>
</item>
<item>
<key xsi:type="xsd:string">Transport</key>
<value xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">Protocol</key>
<value xsi:type="xsd:string">UDP</value>
</item>
</value>
</item>
</value>
</item>
<item>
<key xsi:type="xsd:string">ProfileToken</key>
<value xsi:type="xsd:string">main</value>
</item>
</param0>
</ns1:GetStreamUri>
我需要这样:
<GetStreamUri xmlns="http://www.onvif.org/ver10/media/wsdl">
<StreamSetup>
<Stream xmlns="http://www.onvif.org/ver10/schema">RTP-Unicast</Stream>
<Transport xmlns="http://www.onvif.org/ver10/schema">
<Protocol>UDP</Protocol>
</Transport>
</StreamSetup>
<ProfileToken>main</ProfileToken>
</GetStreamUri>
我已经设法通过扩展默认 SOAP 扩展生成第二个示例中的请求,但我仍然需要添加所有类型、 namespace 等...我不知道如何解析...所以可能是有什么方法可以根据 WSDL 文档中提供的规范生成此请求?
请您参考如下方法:
当然有。你检查过SUDS了吗? https://fedorahosted.org/suds/wiki/Documentation
可能是最强大的 Python SOAP 库。
它的工作原理是
from suds.client import Client
client = Client("http://example.com/foo.wsdl")
client.service.someMethod(someParameter)
只需在 Stackoverflow 上搜索 SUDS,您就会找到大量示例和更多帮助。
