Skip to main content
 首页 » 编程设计

php之如何在 PHP/Python 中解析 WSDL

2025年05月04日22lexus

我想知道 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,您就会找到大量示例和更多帮助。