2017-05-15 9 views
1

Wie kann ich eine XML-Antwort auf PHP analysieren? Ich habe mehrere Lösungen ausprobiert, aber nichts funktioniert. Hier ist der XML ich zurück:parsen SOAP xml zu PHP

<soapenv:envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> 
<soapenv:body> 
    <ns:getrateresponse xmlns:ns="http://services.gts"> 
     <ns:return xmlns:ax25="http://services.gts/xsd" xmlns:ax26="http://model.gts/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax25:RaterResponseAutoQuotes"> 

      <ax25:carriers xsi:type="ax25:RaterResponseCarriersAutoQuotes"> 
       <ax25:accessorials xsi:type="ax25:RaterResponseAccessorial"> 
        <ax25:aramount>12.66</ax25:aramount> 
        <ax25:accessorialid>22</ax25:accessorialid> 
        <ax25:accessorialname>Fuel</ax25:accessorialname> 
       </ax25:accessorials> 
       <ax25:ar_final_rate>161.66</ax25:ar_final_rate> 
       <ax25:carrier_id>0000087</ax25:carrier_id> 
       <ax25:carrier_name>CON-WAY FREIGHT INC</ax25:carrier_name> 
       <ax25:service_days>04</ax25:service_days> 
      </ax25:carriers> 

      <ax25:message>Success</ax25:message> 
      <ax25:referencenumber>3184877</ax25:referencenumber> 
      <ax25:success>true</ax25:success> 
     </ns:return> 
    </ns:getrateresponse> 
</soapenv:body> 

Parse:

foreach($xml->ax25:carriers as $carrier) { 
    $$carrierObject = array(
     "rate" => $carrier->ar_final_rate, 
    ); 
    array_push($carriers, $$carrierObject); 
    } 

Alles, was ich kümmern uns um die jeweils ax25:carriersax25:ar_final_rate. Ich habe auch versucht

$result = new SimpleXMLElement($response); 

aber zurück

object(SimpleXMLElement)#2 (0) { } 
+0

Verwenden [PHP in SOAP Funktionalität gebaut] (http://php.net/manual/en/book.soap.php) –

Antwort

0

Hier stellen wir DOMDocument für verwenden textContent innerhalb dieser Tags <ax25:ar_final_rate>

Try this code snippet here Extrahieren

<?php 
ini_set('display_errors', 1); 
$string='<soapenv:envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> 
<soapenv:body> 
    <ns:getrateresponse xmlns:ns="http://services.gts"> 
     <ns:return xmlns:ax25="http://services.gts/xsd" xmlns:ax26="http://model.gts/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax25:RaterResponseAutoQuotes"> 

      <ax25:carriers xsi:type="ax25:RaterResponseCarriersAutoQuotes"> 
       <ax25:accessorials xsi:type="ax25:RaterResponseAccessorial"> 
        <ax25:aramount>12.66</ax25:aramount> 
        <ax25:accessorialid>22</ax25:accessorialid> 
        <ax25:accessorialname>Fuel</ax25:accessorialname> 
       </ax25:accessorials> 
       <ax25:ar_final_rate>161.66</ax25:ar_final_rate> 
       <ax25:carrier_id>0000087</ax25:carrier_id> 
       <ax25:carrier_name>CON-WAY FREIGHT INC</ax25:carrier_name> 
       <ax25:service_days>04</ax25:service_days> 
      </ax25:carriers> 

      <ax25:message>Success</ax25:message> 
      <ax25:referencenumber>3184877</ax25:referencenumber> 
      <ax25:success>true</ax25:success> 
     </ns:return> 
    </ns:getrateresponse> 
</soapenv:body> 
</soapenv:envelope>'; 

$domDocument = new DOMDocument(); 
$domDocument->loadXML($string); 
$carriers=array(); 
$results=$domDocument->getElementsByTagNameNS("http://services.gts/xsd", "ar_final_rate"); 
foreach($results as $result) 
{ 
    array_push($carriers, $result->textContent); 
} 
print_r($carriers); 

Ausgang :

Array 
(
    [0] => 161.66 
)