Помогите разобраться с XML ответом!

Pokrowsky

Новичок
Привет Разработчики! Такая проблема:
Никогда не работал с xml. Вообщем есть запрос к серверу

PHP:
<?php
$soap = curl_init("http://staging-ws.epower.amadeus.com/wsgezzaz/EpowerService.asmx");
curl_setopt($soap, CURLOPT_POST, 1);


$request = <<<XML
        <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
            <soap:Header>
                <AuthenticationSoapHeader xmlns='http://epowerv5.amadeus.com.tr/WS'>
                    <WSUserName>wsgezzaz</WSUserName>
                    <WSPassword>Amadeus1!</WSPassword>
                </AuthenticationSoapHeader>
            </soap:Header>
            <soap:Body>
                <SearchFlight xmlns='http://epowerv5.amadeus.com.tr/WS'>
                    <OTA_AirLowFareSearchRQ ProviderType='OnlyAmadeus' RefundableType='OnlyRefundable' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' Version='0'>
                        <OriginDestinationInformation>
                            <DepartureDateTime>2016-08-11T00:01:00</DepartureDateTime>
                            <OriginLocation LocationCode='GYD' MultiAirportCityInd="false" />
                            <DestinationLocation LocationCode='FRA' />
                        </OriginDestinationInformation>
                        <TravelerInfoSummary>
                            <AirTravelerAvail>
                                <PassengerTypeQuantity Code='ADT' />
                            </AirTravelerAvail>
                        </TravelerInfoSummary>
                    </OTA_AirLowFareSearchRQ>
                </SearchFlight>
            </soap:Body>
        </soap:Envelope>
XML;

        curl_setopt($soap, CURLOPT_HTTPHEADER,
        array('Content-Type: text/xml; charset=utf-8',
              'Content-Length: '.strlen($request)));

        curl_setopt($soap, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($soap);
        curl_close($soap);
?>
В конце кода:

PHP:
curl_setopt($soap, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($soap);
Я получаю ответ от сервера, не буду его выкладывать там многомиллионные строчки кода на xml.

Дак вот в чем вопрос. Мне нужно извлекать нужную мне информацию из этого xml. Я так понимаю этот ответ садится в переменную $response. Дальше я хочу использовать SimpleXML чтобы извлекать инфу из кода, но simplexml_load_file работает тока с xml файлами. Дак вот как либо этот ответ получить в xml файл, либо как мне дальше работать с этой переменной. Уже три дня бьюсь головой об стену ну никак и ничего не выходит. Рассчитываю на Вашу помощь, сам сдался.
 

Фанат

oncle terrible
Команда форума
За три дня не добраться до раздела "Смотрите также" на странице документации, на которую сам же даешь ссылку - это надо особый талант иметь ;-)
 

Pokrowsky

Новичок
"Смотрите также" на странице документации
А что из этого поможет мне

 

Фанат

oncle terrible
Команда форума
ну попробуй соотнести описание каждой функции со своей задачей?
вот например первая - что делает?
 

Pokrowsky

Новичок
ну попробуй соотнести описание каждой функции со своей задачей?
вот например первая - что делает?
Получает правильно сформированную XML-строку и возвращает ее как объект. Это уже тоже пробовал, не помню что вышло, но не сработало
 
Последнее редактирование:

Pokrowsky

Новичок
А вообще как я правильно понимаю ответ попадает вот в эту переменную
PHP:
$response = curl_exec($soap);
Да так?
 

Фанат

oncle terrible
Команда форума
А вообще как я правильно понимаю ответ попадает вот в эту переменную
PHP:
$response = curl_exec($soap);
Да так?
Ты же вроде писал что там лежит многомиллионный ответ?
Так лежит или нет?
Ты сам-то можешь определиться?
 

Pokrowsky

Новичок
Ты же вроде писал что там лежит многомиллионный ответ?
Так лежит или нет?
Я уже сам сомневаюсь потому что я сейчас попробовал вот это

PHP:
include 'script.php';

                    $movies = new SimpleXMLElement($response);
                  
                    echo "xxxxxxxxxx".$movies->movie[0]->FlightDuration;
И мне приходит вот это

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in D:\OpenServer\domains\amadeus\index.phpon line 17

Warning: SimpleXMLElement::__construct(): 1 in D:\OpenServer\domains\amadeus\index.php on line 17

Warning: SimpleXMLElement::__construct(): ^ in D:\OpenServer\domains\amadeus\index.php on line 17

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in D:\OpenServer\domains\amadeus\index.php:17 Stack trace: #0 D:\OpenServer\domains\amadeus\index.php(17): SimpleXMLElement->__construct('1') #1 {main} thrown inD:\OpenServer\domains\amadeus\index.php on line 17



Но что самое интересное в браузере я ответ получаю и вижу его
 

Фанат

oncle terrible
Команда форума
короче. соберись.
реши в чем твоя проблема, а потом задавай вопрос
 

Pokrowsky

Новичок
короче. соберись.
реши в чем твоя проблема, а потом задавай вопрос
Давай по порядку

PHP:
$soap = curl_init("http://staging-ws.epower.amadeus.com/wsgezzaz/EpowerService.asmx");
curl_setopt($soap, CURLOPT_POST, 1);
Вот это curl подключение к линку сервера. Дальше

PHP:
$request = <<<XML
        <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
            <soap:Header>
                <AuthenticationSoapHeader xmlns='http://epowerv5.amadeus.com.tr/WS'>
                     <WSUserName>wsgezzaz</WSUserName>
                     <WSPassword>Amadeus1!</WSPassword>
                </AuthenticationSoapHeader>
            </soap:Header>
            <soap:Body>
                <SearchFlight xmlns='http://epowerv5.amadeus.com.tr/WS'>
                    <OTA_AirLowFareSearchRQ ProviderType='OnlyAmadeus' RefundableType='OnlyRefundable' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' Version='0'>
                        <OriginDestinationInformation>
                            <DepartureDateTime>2016-08-11T00:01:00</DepartureDateTime>
                            <OriginLocation LocationCode='GYD' MultiAirportCityInd="false" />
                            <DestinationLocation LocationCode='FRA' />
                        </OriginDestinationInformation>
                        <TravelerInfoSummary>
                            <AirTravelerAvail>
                                <PassengerTypeQuantity Code='ADT' />
                            </AirTravelerAvail>
                        </TravelerInfoSummary>
                    </OTA_AirLowFareSearchRQ>
                </SearchFlight>
            </soap:Body>
        </soap:Envelope>
XML;
Вот это запрос к серверу.

PHP:
curl_setopt($soap, CURLOPT_HTTPHEADER,
        array('Content-Type: text/xml; charset=utf-8',
              'Content-Length: '.strlen($request)));

        curl_setopt($soap, CURLOPT_POSTFIELDS, $request);
Вот это еще что то.

PHP:
$response = curl_exec($soap);
        curl_close($soap);
Вот уже заключение.

Блин я тока понял что ответ от сервера приходит просто тупо, никуда не записывается. Так теперь первая задача как при получений ответа записать его в какую переменную, и если это получиться, то дальше будет то что мне нужно
 

Pokrowsky

Новичок
CURLOPT_RETURNTRANSFER TRUE для возврата результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер.

Дальше я вписываю это в свой код

curl_setopt($soap, CURLOPT_RETURNTRANSFER, 1);

Тока вместо 1 я должен поставить $request, да? И получаю вот это
PHP:
curl_setopt($soap, CURLOPT_POSTFIELDS, $request);
        curl_setopt($soap, CURLOPT_RETURNTRANSFER, $request);
        $response = curl_exec($soap);
        curl_close($soap);
А дальше?
 

Фанат

oncle terrible
Команда форума
а как ты проверяешь?
что лежит в $response?
проверяешь ли ты ошибки?
 
Сверху