如何从我的webservice中检索xml

时间:2012-07-31 14:15:31

标签: php xml web-services soap

我在php中使用了一个web服务:

http://cdt33.tourinsoft.com/soft/RechercheDynamique/Syndication/controle/syndication2.asmx

您可以使用getListing测试idModule = dafda774-317d-4b5f-bb8b-33e5977dc13c示例,然后点击invoke

我正在尝试在php中检索此结果(XML)。但我不知道该怎么做。

如果我使用getListing:

$client = new SoapClient("http://cdt33.tourinsoft.com/soft/RechercheDynamique/Syndication/controle/syndication2.asmx?wsdl");

echo "GET LISTING";
$getListing = $client->getListing(
    array (
        'idModule' => "dafda774-317d-4b5f-bb8b-33e5977dc13c"));
echo("<pre>");
print_r($getListing);
echo("</pre>");

结果是这样的:

stdClass Object
(
    [getListingResult] => stdClass Object
        (
            [schema] => 
            [any] => 
HOTAQU03301V3EZB2005-06-29T00:00:00.0000000+02:002012-06-28T14:43:44.0000000+02:0074HOTHôtellerie1e9eb500-e0c9-4a53-b6a5-0b36faa63ed4true 2 étoiles Français www.hotel-lenovel.com +33 5 57 52 26 47 7 oui En centre ville$ Au bord de la mer Ascenseur$ Salon 22 -1.164866 Au coeur d'Arcachon, à deux pas de la gare, du théâtre de l'Olympia et de l'Office du Tourisme, le Novel bénéficie d'une situation privilégiée. Les chambres sont chaleureuses et douillettes pour un séjour....... ETC

我如何解读XML?谢谢你!

3 个答案:

答案 0 :(得分:1)

这是尝试,运行它并检查页面的源代码,它应该包含xml文件。 SOAP只是一种做事的奇特方式。

<?php
function smartpost($type,$host,$port='80',$path='/',$data='') {
    $d="";
    $str="";
    $_err = 'lib sockets::'.__FUNCTION__.'(): ';
    switch($type) { case 'http': $type = ''; case 'ssl': continue; default: die($_err.'bad $type'); } if(!ctype_digit($port)) die($_err.'bad port');
    if(!empty($data)) foreach($data AS $k => $v) $str .= urlencode($k).'='.urlencode($v).'&'; $str = substr($str,0,-1);


    $fp = fsockopen($host,$port,$errno,$errstr,$timeout=30);
    if(!$fp) die($_err.$errstr.$errno); else {
        fputs($fp, "POST $path HTTP/1.1\r\n");
        fputs($fp, "Host: $host\r\n");
        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: ".strlen($str)."\r\n");
        fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $str."\r\n\r\n");

        while(!feof($fp)) $d .= fgets($fp,4096);
        fclose($fp);
        $result = explode("\r\n\r\n", $d, 2);

        $header = isset($result[0]) ? $result[0] : '';
        $content = isset($result[1]) ? $result[1] : '';

    } return array($header, $content);
}

list($header, $content) = smartpost('http','cdt33.tourinsoft.com','80','/soft/RechercheDynamique/Syndication/controle/syndication2.asmx/getListingByIDs',array('idModule'=>'dafda774-317d-4b5f-bb8b-33e5977dc13c','ObjetTourCode' => '','IDs' => ''));
print($content);
?>

答案 1 :(得分:0)

假设您使用的是标准PHP SoapClient,请尝试使用

$client->__getLastRequestHeaders()

(http://www.php.net/manual/en/soapclient.getlastresponse.php) 根据maual,你还应该在SoapClient上将trace选项设置为true:

$client = new SoapClient("http://cdt33.tourinsoft.com/soft/RechercheDynamique/Syndication/controle/syndication2.asmx?wsdl", array('trace' => true));

此致,Jakub Derda

答案 2 :(得分:0)

类ABRSoapClient扩展了SoapClient  {

$result = "";

function __doRequest($request, $location, $action, $version) 
{

    $result =  parent::__doRequest($request, $location, $action, $version); 
    return $result;

}

}

而不是创建SoapClient的对象,创建ABRSoapClient的对象,这里$ result是来自Web-Service的XML字符串。

您可以使用$ client-&gt; result;

访问该变量