PHP SoapFault未在细节子元素中传递属性

PHP SoapFault未在细节子元素中传递属性,php,soap,soapfault,Php,Soap,Soapfault,我调用的Web服务返回SoapFault,其中xml嵌入在元素中-这是它在SoapUI中的外观: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server</faultcode> <f

我调用的Web服务返回SoapFault,其中xml嵌入在
元素中-这是它在SoapUI中的外观:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <soapenv:Fault>
        <faultcode>soapenv:Server</faultcode>
        <faultstring>some error msg</faultstring>
        <detail>
            <e:exchange-error xmlns:e="http://mycompany.com/faults">
                <e:message-data id="00001" type="005"/>
                <e:result-data date="2017-02-13 15:44:33" code="1401" ref="2457798154426512"/>
            </e:exchange-error>
        </detail>
    </soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>`

是否有方法获取具有属性值的
交换错误
对象?或者从
detail
获取XML/string并解析它?错误消息是在WSDL中定义的,所以我想它的结构应该在客户端是已知的。

php响应中不返回名称空间属性。它们仅用于定义响应对象的类型


如果您想轻松一天,可以使用WSDL-to-php生成器,比如项目。它将简化您构造请求的过程,简化您接收响应的过程,最终简化您对任何错误的处理。

php响应中不会返回名称空间属性。它们仅用于定义响应对象的类型


如果您想轻松一天,可以使用WSDL-to-php生成器,比如项目。这会让你轻松构建请求,让你轻松接收响应,最后,它将简化您对任何错误的处理。

不幸的是,我无法控制服务器在响应中忽略了什么-我只需要确定结果数据属性之一的值,以实现故障处理的特殊情况。不幸的是,我无法控制服务器在响应中忽略了什么-我只需要确定结果数据属性之一,用于实现故障处理的特殊情况。
try {
    $resp = $this->_soap->__soapCall("myMethod", ['param-data' => $req->get()]);
    var_dump($response);
} catch (\SoapFault $e) {
    if (empty($e->detail->{'exchange-error'}->{'result-data'})) {
        echo "it's empty :(\n";
        var_dump($e->detail->{'exchange-error'});
    }
}

$ php -f foobar.php
it's empty :(
object(stdClass)#7 (4) {
  ["message-data"]=>
  string(0) ""
  ["result-data"]=>
  string(0) ""
}