3 votes

Analyse de la réponse à partir du WSDL en utilisant PHP

Je suis vraiment désolé si j'ai fait un titre erroné, je ne suis pas familier avec les réponses SOAP et leurs types. Mais je suppose que c'est une réponse WSDL, du moins je l'ai obtenu à partir du lien WSDL...

J'ai l'url suivante http://somedomain.com/j.svc?wsdl

Et après avoir fait une requête en utilisant curl_multi, j'ai obtenu la réponse suivante. La réponse a été raccourcie à deux résultats pour qu'elle soit plus facile à lire.

La réponse est la suivante :

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetJourneyListResponse xmlns="http://tempuri.org/">
          <GetJourneyListResult xmlns:a="http://schemas.datacontract.org/2004/07/DreamFlightWCF" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
              <a:Journey>
                 <a:FromAirport>LHR</a:FromAirport>
                 <a:TotalPrice>146</a:TotalPrice>
              </a:Journey>
              <a:Journey>
                 <a:FromAirport>LHR</a:FromAirport>
                 <a:TotalPrice>155</a:TotalPrice>
              </a:Journey>
           </GetJourneyListResult>
      </GetJourneyListResponse>
  </s:Body>
</s:Envelope>

Est-il possible d'analyser le résultat en utilisant PHP ? J'ai fait de nombreuses recherches, notamment sur StackOverflow, et voici ce que j'ai réussi à trouver.

Pour analyser la réponse ci-dessus, je peux utiliser le code suivant :

$xml = simplexml_load_string($result);
$xml->registerXPathNamespace('flight','http://schemas.datacontract.org/2004/07/DreamFlightWCF');
   foreach ($xml->xpath('//flight:Journey') as $item){
     print_r($item);
   }

Il semble que le morceau de code PHP ci-dessus soit partiellement correct. J'obtiens le nombre correct de "Journey" mais le $item est vide.

Des solutions ? Ne conseillez pas d'utiliser SoapClient pour récupérer le résultat. Je ne peux pas passer de curl_multi. J'ai déjà le résultat et j'ai besoin de le parser. Merci d'avance

0voto

$soap_request  = "<?xml version=\"1.0\"?>\n";
      $soap_request .= "<soap:Envelope xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">\n";
      $soap_request .= "  <soap:Body xmlns:m=\"http://www.example.org/stock\">\n";
      $soap_request .= "    <m:GetStockPrice>\n";
      $soap_request .= "      <m:StockName>IBM</m:StockName>\n";
      $soap_request .= "    </m:GetStockPrice>\n";
      $soap_request .= "  </soap:Body>\n";
      $soap_request .= "</soap:Envelope>";

      $header = array(
        "Content-type: text/xml;charset=\"utf-8\"",
        "Accept: text/xml",
        "Cache-Control: no-cache",
        "Pragma: no-cache",
        "SOAPAction: \"run\"",
        "Content-length: ".strlen($soap_request),
      );

      $soap_do = curl_init();
      curl_setopt($soap_do, CURLOPT_URL, "http://ecc6unitst.kaisa.com:8000/sap/bc/srt/wsdl/bndg_386D2B5BD851F337E1000000AC1264E4/wsdl11/allinone/standard/document?sap-client=400" );
      curl_setopt($soap_do, CURLOPT_USERPWD, "EBALOBORRP:welcome1");
      curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
      curl_setopt($soap_do, CURLOPT_TIMEOUT,        10);
      curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
      curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
      curl_setopt($soap_do, CURLOPT_POST,           true );
      curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $soap_request);
      curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $header);
      $str = curl_exec($soap_do);
      if(curl_exec($soap_do) === false) {
        $err = 'Curl error: ' . curl_error($soap_do);
        curl_close($soap_do);
        print $err;
      } else {
        curl_close($soap_do);
        var_dump($str);
        print 'Operation completed without any errors';
      }

-1voto

Premier essai Analyse de la réponse SOAP alors essayez Google .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X