2011-11-13 7 views
3

このSOAP応答エンベロープからerror_codeを読み取るにはどうすればよいですか?私のPHPバージョンは5.2.0です。 109PHPでSOAP応答エンベロープを読む方法

私はnusoapを使用しています:私はちょうどERROR_CODEの値を読み取る必要が

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
<soap:Body> 
    <Response xmlns="http://xxx.gateway.xxx.abcd.com"> 
    <return> 
     <transaction_id>1234567</transaction_id> 
     <error_code>109</error_code>  
    </return> 
    </Response> 
</soap:Body> 
</soap:Envelope> 

値があるtag.here。私は以下のコードを使用しますが正常に動作しません:

$response=htmlspecialchars($client->response, ENT_QUOTES); 
$xml = simplexml_load_string($response); 
$ns = $xml->getNamespaces(true); 
$soap = $xml->children($ns['soap']); 
$error_code = $soap->body->children($ns['error_code']); 
+1

http://stackoverflow.com/q/1470579/367456 – hakre

答えて

5
<?php 

$string = <<<XML 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
<soap:Body> 
    <Response xmlns="http://xxx.gateway.xxx.abcd.com"> 
    <return> 
     <transaction_id>1234567</transaction_id> 
     <error_code>109</error_code>  
    </return> 
    </Response> 
</soap:Body> 
</soap:Envelope> 
XML; 

$xml = new SimpleXMLElement($string); 
$xml->registerXPathNamespace("soap", "http://www.w3.org/2003/05/soap-envelope"); 
$body = $xml->xpath("//soap:Body"); 
$error_code = (string)$body[0]->Response->return->error_code; 
print_r($error_code); 
?> 

OR

$xml = simplexml_load_string($string); 
$error_code = (string)$xml->children('soap', true) 
          ->Body 
          ->children() 
          ->Response 
          ->return 
          ->error_code; 
+0

ヤップ...多くThanks.Both作品。 – riad