Я использую веб-сервис, который возвращает ответ SOAP.Я хочу перебрать весь набор результатов и выполнять действия на основе значений атрибута.
Поскольку клиент 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();
}
Вот несколько примеров выходных данных ...
<code>echo "<pre>";
print_r($response);
echo "
";
выход ... ... 1015 *
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);
<code>$responseString = $client->__getLastResponse();
echo "<pre>";
print_r($responseString);
echo "
";
yields ...
<?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, используя следующее ...
<code>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 "
";
, что дает ...
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 и т. Д.