如何在PHP/Python中解析WSDL?
我在想,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扩展成功生成了第二个例子中的请求,但我仍然需要添加所有的类型、命名空间等等……我不知道怎么解析这些内容……所以,是否有办法根据WSDL文档中提供的规范来生成这些请求呢?
1 个回答
1
当然有了。你有没有看看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,你会找到很多例子和更多的帮助。