2

SOAP サービスからの xml 応答を解析しようとしています。しかし、simplexml_load_string を動作させることができません! これが私のコードです:

//make soap call
objClient = new SoapClient('my-wsdl',
    array('trace' => true,'exceptions' => 0, 'encoding' => 'UTF-8'));
$soapvar = new SoapVar('my-xml', XSD_ANYXML);
$objResponse = $objClient->__soapCall($operation, array($soapvar));

//process result
$str_xml = $objClient->__getLastResponse();
$rs_xml = simplexml_load_string($str_xml);

...$rs_xml には常に Envelope という名前の要素が 1 つだけ含まれます。

ただし、*"print var_export($objClient->__getLastResponse(),true);"* を使用して結果をブラウザーにダンプし、それを切り取ってコードに文字列変数として貼り付けると、問題なく動作します! これが私が意味することです:

$str_xml = 'my cut and pasted xml';
$rs_xml = simplexml_load_string($str_xml);

したがって、問題は何らかの形で $objClient->__getLastResponse() が作成する文字列に対して行っていることに関連しているようです...しかし、問題の内容や修正方法については途方に暮れています。

4

1 に答える 1

1

以下をせよ:

$str_xml = $objClient->__getLastResponse();    
$str_xml = strstr($str_xml, '<');
$rs_xml = simplexml_load_string($str_xml);

最初の開始要素の前にあるものを取り除くのは、すばやく簡単なハックだからです。

于 2012-09-19T04:31:33.457 に答える