2013-11-20 157 views
0

我需要幫助解析我從調用Web服務獲得的PHP XML響應。解析器的類型並不重要(DOM/SAX/ETC ..),但請注意,XML文件不是長文件。 (最多約50行)。我嘗試使用simplexml_load_string,但我無法從中提取數據。與我想的肥皂或信封名稱空間有關。如何解析肥皂響應php

響應:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"` xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<ProcessRequestResponse xmlns="http://xxxxxxxxx.yyy"> 
<ProcessRequestResult> 
<OutputData> 

&lt;?xml version="1.0" encoding="utf-8" ?&gt; 
&lt;DATA&gt; 
&lt;RECORD ID="1"&gt;&lt;COURSE_ID&gt;44226&lt;/COURSE_ID&gt;&lt;COURSE_NUMBER&gt;1234567-0&lt;/COURSE_NUMBER&gt;&lt;/RECORD&gt; 

&lt;RECORD ID="2"&gt;&lt;COURSE_ID&gt;44227&lt;/COURSE_ID&gt;&lt;COURSE_NUMBER&gt;1234598-0&lt;/COURSE_NUMBER&gt;&lt;/RECORD&gt; 

&lt;/DATA&gt; 
</OutputData> 
<ErrorMessage /> 
<Result>Success</Result> 
</ProcessRequestResult> 
</ProcessRequestResponse> 
</soap:Body> 
</soap:Envelope> 

這是EXACT響應,我是從服務器獲取。

請幫我解析這個xml!我現在真的迷失了。

編輯:固定肥皂身體,有記錄結束標記。

回答

0

嘗試通過定義SoapClient classmap option來調用SOAP Web服務。此外,您必須通過調用html_entity_decode然後simplexml_load_string來加載OutputData。

您CAL也嘗試了WSDL到PHP發生器會緩解你的調用和響應的接收,如https://github.com/mikaelcom/WsdlToPhp

0

我怎麼做,創建易緯SOAP請求,並得到易緯肥皂結果,可能有助於其他!

<?php 
    $URL = "https://www.eway.com.au/gateway/rebill/test/manageRebill_test.asmx?wsdl"; 
       $option = array("trace"=>true); 
       $client = new SOAPClient($URL, $option); 
       $functions = $client->__getFunctions(); 
     $headeroptions=array('eWAYCustomerID'=>"87654321",'Username'=>"[email protected]","Password"=>"test123"); 
       $header = new SOAPHeader('http://www.eway.com.au/gateway/rebill/manageRebill', 'eWAYHeader',$headeroptions); 

       $bodyoptions = array(
           "CreateRebillCustomer" => array(
            "customerTitle" => "Mr",     
             "customerFirstName"=>"Muhammad", 
             "customerLastName"=>"Shahzad", 
             "customerAddress"=>"cust ome rAddress", 
             "customerSuburb"=>"customer Suburb", 
             "customerState"=>"ACT", 
             "customerCompany"=>"customer Company", 
             "customerPostCode"=>"2345", 
             "customerCountry"=>">Australia", 
             "customerEmail"=>"[email protected]", 
             "customerFax"=>"0298989898", 
             "customerPhone1"=>"0297979797", 
             "customerPhone2"=>"0297979797", 
             "customerRef"=>"Ref123", 
             "customerJobDesc"=>"customerJobDesc", 
             "customerComments"=>"customerComments",      
             "customerURL" => "http://www.acme.com.au" 
            ) 
           ); 

        try{ 
         $response = $client->__soapCall("CreateRebillCustomer", $bodyoptions,NULL,$header,$outputHeader); 
         //echo $client->__getLastRequest(); 
         //$response = $client->CreateRebillCustomer($bodyoptions); 
         //echo "<pre>";echo "<br/>"; 
         // print_r($response);   
          echo $result   = $response->CreateRebillCustomerResult->Result;echo "<br/>"; 
          echo $customerId  = $response->CreateRebillCustomerResult->RebillCustomerID;echo "<br/>"; 
          echo "<br/>"; 
         if($result=='Success' AND $customerId){ 
          echo 'Member Created at eWay Successfully!...<br/>'; 
          echo 'Creating Recurring Billing Cycle on eWay,Please wait......<br/>'; 
          //$UpdateRebillCustomer = CreateRebillEvent($customerId); 
          //print_r($UpdateRebillCustomer); 

         } 
         else{ 
          echo $ErrorSeverity = $response->CreateRebillCustomerResult->ErrorSeverity;echo "<br/>"; 
          echo $ErrorDetails = $response->CreateRebillCustomerResult->ErrorDetails;echo "<br/>"; 
         } 
        } 
        catch(SOAPFault $e){ 
         print $e; 
        } 

        if($customerId){ 


           $bodyoptions2 = array(
           "CreateRebillEvent " => array(
             "RebillCustomerID" => $customerId,     
             "RebillInvRef" => "Ref123", 
             "RebillInvDes"=>"description", 
             "RebillCCName"=>"Mr Andy Person", 
             "RebillCCNumber"=>"4444333322221111", 
             "RebillCCExpMonth"=>"12", 
             "RebillCCExpYear"=>"15", 
             "RebillInitAmt"=>"100", 
             "RebillInitDate"=>date('d/m/Y'), 
             "RebillRecurAmt"=>"200", 
             "RebillStartDate"=>date('d/m/Y'), 
             "RebillInterval"=>"31", 
             "RebillIntervalType"=>"1", 
             "RebillEndDate"=>"31/12/2013",      
            ) 
           ); 
         try{  
          $response = $client->__soapCall("CreateRebillEvent", $bodyoptions2,NULL,$header,$outputHeader); 
          //echo $client->__getLastRequest();   
          //print_r($response); 
          echo "<br/>"; 
           echo $result2  = $response->CreateRebillEventResult->Result;echo "<br/>"; 
           echo $RebillCustomerID = $response->CreateRebillEventResult->RebillCustomerID;echo "<br/>"; 
          if($result2=='Success'){ 
           echo 'Recurring Cycle Created Successfully at eWay!...<br/>'; 
           echo 'Member Id is ===>'.$RebillCustomerID; 
           //$UpdateRebillCustomer = CreateRebillEvent($customerId); 
           //print_r($UpdateRebillCustomer);       
          } 
          else{ 
           echo $ErrorSeverity = $response->CreateRebillEventResult->ErrorSeverity;echo "<br/>"; 
           echo $ErrorDetails = $response->CreateRebillEventResult->ErrorDetails;echo "<br/>"; 
          } 

         } 
        catch(SOAPFault $e){ 
         print $e; 
        } 

        } 

        ?> 
0
$xml = '<?xml version="1.0" encoding="utf-8"?> 
       <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
        <soap:Body> 
        <ProcessRequestResponse xmlns="http://xxxxxxxxx.yyy"> 
         <ProcessRequestResult> 
          <OutputData>123</OutputData> 
          <ErrorMessage /> 
          <Result>Success</Result> 
         </ProcessRequestResult> 
        </ProcessRequestResponse> 
        </soap:Body> 
       </soap:Envelope>'; 
     $doc = new DOMDocument(); 
     $doc->loadXML($xml); 
     echo $doc->getElementsByTagName('OutputData')->item(0)->nodeValue; 

結果是:

3