我现在已经试图解决这个问题超过一个小时了,我放弃了。我从网络服务获得以下回复。
我希望能够访问Fault的子项(我有这个工作用于另一个webservice调用,但由于某种原因,我认为可能与命名空间相关,这个不起作用)。< / p>
<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Invalid Scope</faultstring>
<detail>
<faultresponse xmlns="xsd url" xmlns:ns2="xsd url">
<transactionid>TEST</transactionid>
<errorcode>ERR-4223</errorcode>
</faultresponse>
</detail>
</soap:Fault>
</soap:Body>
</soap:envelope>
我的PHP代码非常简单。首先,我从上面的xml创建SimpleXmlElement对象。
我得到了xml中的命名空间列表(它选择了两个:&#34; soap&#34;和&#34;&#34;)。然后我在soap:namespace中获取XML的子代。
$xml = simplexml_load_string($response_xml);
$namespace = $xml->getNamespaces(true);
$soap = $xml->children($namespace['soap']);
鉴于上述代码。我希望能够做到这样的事情:
$fault_fields = $soap->Body->children()->Fault->children();
foreach ($fault_fields as $field):
echo (string) $field->getName() . ' - ' . $field[0] . '<br />';
endforeach;
但是,如果我运行$ soap-&gt; asXML();我可以看到以下内容:
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Invalid Scope</faultstring>
<detail>
<faultresponse xmlns="xsd url" xmlns:ns2="xsd url">
<transactionid>TEST</transactionid>
<errorcode>ERR-4223</errorcode>
</faultresponse>
</detail>
</soap:Fault>
</soap:Body>
但是,如果我尝试访问Body或Fault:
$soap = &$this->parse_soap_body($response_xml);
$body = $soap->Body->children()->Fault->children();
echo $body->asXML();
我得到一个Node不再存在错误,堆栈返回此XML。
<soap:Envelope xmlns:soap="`http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Invalid Scope</faultstring>
.... more xml
这是我的头脑。
非常感谢任何帮助。