Объекту ответа SOAP не хватает меток атрибута, если он не преобразован в строку - PullRequest
0 голосов
/ 31 января 2019

Я использую веб-сервис, который возвращает ответ 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&amp;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 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...