好的,所以我让 SOAPClient 打电话。如果我使用 __getLastResponse() 我会在我的 XML 中得到这样的一行:
<Discount xsi:type="ProgressivePromotion" from="2013-05-05T00:00:00" to="2013-05-14T00:00:00" type="Percent" value="20" name="Special Deal"/>
但是,我的 SOAPClient 类中的函数返回一个对象。
PHP类中调用的代码是:
function SearchHotels($parameters ){
$funcRet = null;
try {
$funcRet = $this->client->SearchHotels($parameters);
} catch ( Exception $e ) {
echo "(SearchHotels) SOAP Error:\n-------------------------------------\n" . $e->getMessage () . "\n\n";
echo "(SearchHotels) Request:\n-------------------------------------\n" . $this->client->__getLastRequest() . "\n\n";
echo "(SearchHotels) Response:\n-------------------------------------\n" . $this->client->__getLastResponse() . "\n\n";
}
return $funcRet;
}
当我使用返回的对象时,我可以从 Discount 元素访问以下属性:
类型:ProgressivePromotion
从:2013-05-05T00:00:00
到:2013-05-14T00:00:00
值:20
名称:特价
但我无法访问 type="Percent"
似乎 SOAPClient 忽略了 xsi:type 中的 xsi 命名空间,只是将该属性存储为type。
那么如何访问 xsi:type AND type 以便我可以判断我的折扣是百分比还是金额或任何其他类型?
顺便说一句,在我的 SOAP 响应的顶部,我没有看到任何声明 xsi 是什么。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SearchHotelsResponse xmlns="http://tourico.com/webservices/hotelv3">
<SearchHotelsResult>
<Info xmlns="http://schemas.tourico.com/webservices/hotelv3" version="9.71" culture="en-US" serverTime="2013-02-06T14:49:58.3500117-05:00"/>
<HotelList xmlns="http://schemas.tourico.com/webservices/hotelv3">
编辑
如果我 var_dump 返回的对象,我得到
stdClass Object
(
[SearchHotelsResult] => stdClass Object
(
[Info] => stdClass Object
(
[version] => 9.71
[culture] => en-US
[serverTime] => 2013-02-06T15:17:59.8445748-05:00
)
[HotelList] => stdClass Object
(
[Hotel] => Array
(
[0] => stdClass Object
[RoomTypes] => stdClass Object
(
[RoomType] => Array
(
[0] => stdClass Object
(
[Discount] => stdClass Object
(
[from] => 2013-05-05T00:00:00
[to] => 2013-05-14T00:00:00
[type] => ProgressivePromotion
[value] => 20
[name] => Special Deal
)
看看我是如何丢失 type="Amount" 的?
我不能通过这样做来调用折扣
echo $result->SearchHotelsResult->HotelList->Hotel[0]->RoomTypes->RoomType[0]->Discounts->type;
因为我得到
Undefined property: stdClass::$Discounts Notice: Trying to get property of non-object
所以我将整个对象转换成一个巨大的多维数组并以这种方式访问事物。无论如何,type="Amount"没有被提取。