在PHP中使用SoapClient从WSDL获取元素

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在PHP中使用SoapClient从WSDL获取元素脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从< Version>中获取文字.嵌套在< service>内的元素块的WSDL.有问题的WSDL是Ebay的Trading api.有关的片段看起来像这样:
<wsdl:service name="eBayAPIInterfaceService">
    <wsdl:documentation>
        <Version>941</Version>
    </wsdl:documentation>
    <wsdl:port binding="ns:eBayAPISOApBinding" name="eBayAPI">
        <wsdlsoap:address location="https://api.ebay.COM/wsapi"/>
    </wsdl:port>
</wsdl:service>

我正在这样做:

$XMl = new DOMDocument();
$xML->load($this->wsdl);
$version = $xml->getelementsbytagname('Version')->ITem(0)->nodeValue;

这是有用的,但我想知道是否一个方法来获得这个本机使用PHP的SOAP扩展?

我正在想像下面的工作,但它没有:

$client = new SoapClient($this->wsdl);
$version = $client->eBayAPIInterfaceService->Version;
用常规的SoapClient不可能做你想要的.你最好的办法是扩展SoapClient类并抽出这个要求来获取版本.

请注意,file_get_contents没有被缓存,所以它将始终加载WSDL文件.另一方面,SoapClient缓存WSDL,因此您将不得不自己处理它.

也许看看NuSOAP.您将能够修改代码以适合您的目的,而无需加载WSDL两次(当然您也可以修改SoapClient,但这是另一个冠军))

namespace Application;

use DOMDocument;

class SoapClient extends \SoapClient {
    PRivate $version = null;

    function __construct($wsdl,$options = array()) {
        $data = file_get_contents($wsdl);

        $xml = new DOMDocument();
        $xml->loadXML($data);
        $this->version = $xml->getElementsByTagName('Version')->item(0)->nodeValue;

        // or just use $wsdl :P
        // this is just to reuse the already loaded WSDL
        $data = "data://text/plain;base64,".base64_encode($data);
        parent::__construct($data,$options);
    }

    public function getVersion() {
        return is_null($this->version) ? "UkNown" : $this->version;
    }
}

$client = new SoapClient("http://develoPEr.ebay.com/webservices/latest/ebaysvc.wsdl");
var_dump($client->getVersion());

脚本宝典总结

以上是脚本宝典为你收集整理的在PHP中使用SoapClient从WSDL获取元素全部内容,希望文章能够帮你解决在PHP中使用SoapClient从WSDL获取元素所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。