重複の可能性:
SoapClient を使用せずに SOAP 応答を解析する方法
シンプルな nuSoap 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>
<LoginResult xmlns="http://Siddin.ServiceContracts/2006/09">FE99E5267950B241F96C96DC492ACAC542F67A55</LoginResult>
</soap:Body>
</soap:Envelope>
今、私はsimplexml_load_string
ここで提案されているようにそれを解析しようとしています: parse an XML with SimpleXML which has multiple namespacesとここ: Trouble Parsing SOAP response in PHP using simplexml , but I can't get it working.
これは私のコードです:
$xml = simplexml_load_string( $this->getFullResponse() );
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$xml->registerXPathNamespace('xsd', 'http://www.w3.org/2001/XMLSchema');
foreach($xml->xpath('//soap:Body') as $header) {
var_export($header->xpath('//LoginResult'));
}
しかし、結果としてこれだけが得られます:
/* array ( )
私は何を間違っていますか?または、理解するのに欠けている簡単なことは何ですか?
MySqlErrorによるDOM での作業の最終結果:
$doc = new DOMDocument();
$doc->loadXML( $response );
echo $doc->getElementsByTagName( "LoginResult" )->item(0)->nodeValue;
ndmによるSimpleXML での作業の最終結果:
$xml = simplexml_load_string( $response );
foreach($xml->xpath('//soap:Body') as $header) {
echo (string)$header->LoginResult;
}