我正在使用返回SOAP响应的Web服务。我希望遍历整个结果集并根据属性值执行操作。
由于SOAP客户端返回了stdClass的对象,因此我首先尝试直接在该对象上进行迭代,但是它似乎缺少属性标签。
接下来,我尝试调用__getLastResponse()以将响应视为字符串。现在出现了属性标签,但是数据是一个巨大的字符串,我无法对其进行迭代。
最后,我尝试使用simplexml_load_string将此响应字符串转换为另一个对象,并定义SOAP名称空间。现在,所有数据仍然存在,但是再次缺少属性标签。
try {
$client = new soapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
$response = $client->GetAllBookings($xmlArray);
}
catch (Exception $soapError) {
echo "ERROR: " . $soapError->getMessage();
echo "Last response: " . $client->__getLastResponse();
exit();
}
以下是一些示例输出...
echo "<pre>";
print_r($response);
echo "</pre>";
产量...
stdClass Object
(
[GetAllBookingsResult] =>
2019-01-31T00:00:00
2019-01-31T00:00:00
B&E Kincaid Auditorium
2019-01-31T08:00:00
2019-01-31T09:15:00
Registrar (Internal Use Only)
ECO-202-001 PRINCIPLES OF ECO II
As Is/Standard Setup
164
...缺少数据标签。 (var_dump中也缺少属性名称);
$responseString = $client->__getLastResponse();
echo "<pre>";
print_r($responseString);
echo "</pre>";
产量...
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetAllBookingsResponse xmlns="http://DEA.EMS.API.Web.Service/"><GetAllBookingsResult>
<Bookings>
<Data>
<BookingDate>2019-01-31T00:00:00</BookingDate>
<StartBookingDate>2019-01-31T00:00:00</StartBookingDate>
<RoomDescription>B&E Kincaid Auditorium</RoomDescription>
<TimeEventStart>2019-01-31T08:00:00</TimeEventStart>
<TimeEventEnd>2019-01-31T09:15:00</TimeEventEnd>
<GroupName>Registrar (Internal Use Only)</GroupName>
<EventName>ECO-202-001 PRINCIPLES OF ECO II</EventName>
<SetupTypeDescription>As Is/Standard Setup</SetupTypeDescription>
<SetupCount>164</SetupCount>
...这是相同的数据,但包装在属性标签中。这种格式看起来像我想要的格式,但这是一个字符串,不是foreach循环的有效参数,也不是对象。因此,我尝试使用以下方法创建一个simpleXML对象...
define('XML_SOAP_NAMESPACE', 'http://schemas.xmlsoap.org/soap/envelope/');
$simpleXMLObject = simplexml_load_string($responseString);
$simpleXMLArray = $simpleXMLObject->children(XML_SOAP_NAMESPACE)->Body->children();
echo "<pre>";
print_r($simpleXMLArray);
echo "</pre>";
产生...
SimpleXMLElement Object
(
[GetAllBookingsResponse] => SimpleXMLElement Object
(
[GetAllBookingsResult] =>
2019-01-31T00:00:00
2019-01-31T00:00:00
B&E Kincaid Auditorium
2019-01-31T08:00:00
2019-01-31T09:15:00
Registrar (Internal Use Only)
ECO-202-001 PRINCIPLES OF ECO II
As Is/Standard Setup
164
...又回到了平方,没有属性标签,也没有明显的方法可以迭代各种API请求的结果集(我们的响应不会严格格式化,我们确实需要能够确定属性)。
有人能指出我正确的方向吗?我真的只是希望能够遍历结果中的每个预订,并在预订类型等于x时执行某些操作,而在建筑代码等于y时执行某些操作,等等。