我在SOAP服务器中调用方法,响应包含以下XML标记:
<SelctedSupplements>
<Supplement xsi:type="PerRoomSupplement" suppId="1000680" suppName="Upgrade" supptType="4" suppIsMandatory="true" suppChargeType="Included" price="0.00" publishPrice="0.00"/>
</SelctedSupplements>
我得到的结果如下:
object(stdClass)#156 (1) {
["Supplement"]=>
object(stdClass)#157 (7) {
["suppId"]=> int(1000680)
["suppName"]=> string(7) "Upgrade"
["supptType"]=> int(4)
["suppIsMandatory"]=> bool(true)
["suppChargeType"]=> string(8) "Included"
["price"]=> string(4) "0.00"
["publishPrice"]=> string(4) "0.00"
}
}
所以所有属性都存在,除了xsi:type =&#34; PerRoomSupplement&#34;。如何获取Supplement标签的xsi:type?我是否必须获取最后的XML响应并通过XML库解析它?
在我提交问题之前,我做了一些谷歌搜索,并找到了一种方法来完成我想要的,它可能不是理想的答案,但它做了我想要的。在这里,万一其他人正在努力解决同样的问题:
我知道Supplement标记的可能类型是PerRoomSupplement或PerPersonSupplement。我所做的是使用这些名称创建两个类,然后将SOAP响应类映射到我的PHP类。这样,我可以很容易地知道补充的类型(通过使用get_class函数)
class PerRoomSupplement{}
class PerPersonSupplement{}
$client = new SoapClient($url, array("classmap" => array(
"PerRoomSupplement" => "PerRoomSupplement",
"PerPersonSupplement" => "PerPersonSupplement"
)));
谢谢,
答案 0 :(得分:0)
SoapClient 使用xsi:type="PerRoomSupplement"
属性将响应中的类型映射到PHP中的类型。这也可以借助WSDL文件中的信息。
由于没有类映射,因此没有映射类,将为类型映射选择 stdClass 。因此,除非您提供类图,否则该属性中的信息已在转换中使用(和丢失)。
在类图旁边,您还可以挂钩with a typemap,然后您可以通过回调间接获取该属性的信息。此外,它需要您创建自己的对象。
所以我假设使用classmap是保存信息的方法。