2012-02-29 26 views
-1

simplexmlを使用してSOAPレスポンスを渡すと、次のように出力されます。どのようにしてドメインの属性、すなわち名前と利用可能性の値を得ることができますか?使用Simple XMLを使用してSOAPレスポンスを解析するPHP

コード:リターンで

$xmlString = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $result);  
     $xml = simplexml_load_string($xmlString); 
     print_r($xml); 



SimpleXMLElement Object([soapBody] => SimpleXMLElement Object ([CheckAvailabilityResponse] => SimpleXMLElement Object([CheckAvailabilityResult] => &lt;?xml version="1.0" encoding="UTF-16"?&gt; 
&lt;check&gt; 
    &lt;domain name="MYNAMEISNIJIL.COM" avail="1" canBackorder="0"/&gt; 
&lt;/check&gt;))) 

答えて

3

どうやら、あなたがエスケープされているXML(私は今のところ無視します悪い習慣です。)。また、これはあなたのために働くだろう、ということを無視....代わりにpreg_replaceの名前空間で動作するようにchildren()機能に見て:

$outerxml = simplexml_load_string($xmlString); 
    $innerxml = simplexml_load_string(htmlspecialchars_decode(
    $outerxml->soapBody->CheckAvailabilityResponse->CheckAvailabilityResult)); 

をサイドノートでは、私は通常、解析するSOAPClientを活用するために、このちらほらを使用しますSOAP応答:@ Wrikkenの答えに触発さ

//the soap way 
class SneakyFauxSoap extends SoapClient { 
    public $response; 
    function __doRequest($val){ 
     return $this->response; 
    } 
} 

$soap = new SneakyFauxSoap(null, 
    array(
     'uri' =>'something', 
     'location'=>'something', 
     'soap_version' => SOAP_1_1)); 
$soap->response = $x; 
var_dump($soap->somerandomfunction()); 
+0

+1醜いが独創的なSneakyFauxSoapのハック:) – Sergio

0

、私はPHP 5.3で に動作するクラスを使用するように簡単なを書いた:

class SoapParser extends SoapClient { 
    private $xml; 

    function __construct($options) { 
    $options['location'] = $options['uri'] = 'dummy'; 
    parent::__construct(null, $options); 
    } 

    public function __doRequest($request, $location, $action, $version, 
           $one_way = 0) 
    { 
    return $this->xml; 
    } 

    public function parse($xml) { 
    $this->xml = $xml; 
    return $this->dummyFunction(); 
    } 
} 

使用例:

$soapParser = new SoapParser(array('soap_version' => 'SOAP_1_1')); 
try { 
    var_dump($soapParser->parse($response)); 
} catch (Exception $e) { 
    die($e->getMessage()); 
} 
関連する問題