PHP SoapClient和读取属性

PHP SoapClient和读取属性,php,attributes,get,soap-client,Php,Attributes,Get,Soap Client,我已经找到了许多关于SoapClient希望您如何在请求中设置属性的解释,但我无法找到从响应中读取属性的方法 例如,我的SoapClient响应包含以下元素: ... <ns:index> <ns:uid expdate="2013-09-03 14:30:00">JOWtest002</ns:uid> <ns:uid expdate="2013-02-07 15:00:00">JOWtest003</ns:uid> <

我已经找到了许多关于SoapClient希望您如何在请求中设置属性的解释,但我无法找到从响应中读取属性的方法

例如,我的SoapClient响应包含以下元素:

...
<ns:index>
   <ns:uid expdate="2013-09-03 14:30:00">JOWtest002</ns:uid>
   <ns:uid expdate="2013-02-07 15:00:00">JOWtest003</ns:uid>
</ns:index>
...
我曾尝试使用SoapClient类映射将其绑定到对象,但不幸的是,WSDL没有将“uid”元素定义为complexType,因此它也没有映射属性。将“索引”本身绑定到类不起作用


有什么建议吗?我确实希望通过将XML交给SimpleXML或DOMDocument来避免解析它

我经常使用XML,这是一件非常麻烦的事情。根据我的经验,如果您愿意使用一个编写了关于处理SOAP响应的优秀包装器的库,那么可以实现Sabre的XML库


发送和阅读回复非常容易。文档非常好,他们的网站上有很多示例,可以帮助您有效地使用该库。

使用名称空间对您有帮助吗?非常感谢。您能否澄清为什么名称空间会成为一个问题?WSDL定义了常用的SOAP包装名称空间,我们使用的名称空间与我在这里的示例中声明的名称空间不同。因为名称空间指向xml属性,所以我建议使用名称空间。我没有找到有效的解决方案。不幸的是,我被迫将来自SoapClient的getLastResponse()方法的XML解析为DOMDocument,然后手动选择属性并将它们放入与SoapClient生成的stdClass对象匹配的映射中。它很粗糙,但很管用。老实说,我不能相信SoapClient本机不支持将XML属性映射到对象,而且对于大多数开发人员来说,这似乎不是一个问题。我使用的是一个外部API,我们显然不能更改它,它只返回对象属性作为节点属性。我已经花了一个星期的时间试图让它正常工作,但看起来我也要走定制文档的路线了。不仅用于解析,而且还用于生成API期望的请求,例如,搜索参数作为属性,而SOAP客户端仅作为节点。如果你问我的话,那真是太可笑了……这只是一个有用的库,它有相当多的功能和可扩展性,我根本不属于它。如果您想使用PHP的SOAP客户端并围绕该客户端重新构建另一个库,那么请随意使用。我使用它分配,所以我想我会建议它。好吧,足够公平了。以后会尽量让它听起来不像“传单”,谢谢反馈
["index"]=>
  object(stdClass)#80 (1) {
  ["uid"]=>
    array(2) {
    [0]=>
      string(10) "JOWtest002"
    [1]=>
      string(10) "JOWtest003"
    }
}