Синтаксический анализ ответа XML SOAP

0

Im в процессе подключения к SOAP api, передачи некоторых данных, а затем чтения ответа. Im до того момента, когда я получаю запрос SOAP для отправки, и я получаю ответ, но я не могу понять, как разбирать возвращенный XML.

Сначала я передаю учетные данные, чтобы получить auth_ticket:

$rap_soapUrl = "https://technet.rapaport.com/webservices/prices/rapaportprices.asmx?wsdl";
$client = new \SoapClient($rap_soapUrl, array('trace' => 1));
$result = $client->Login($rap_credentials);
$response = $client->__getLastResponse();

Это тот момент, когда я застреваю. Если я отвечу на $ response, я получаю

<?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:Header><AuthenticationTicketHeader xmlns="http://technet.rapaport.com/"><Ticket>TICKETHASH</Ticket></AuthenticationTicketHeader></soap:Header><soap:Body><LoginResponse xmlns="http://technet.rapaport.com/" /></soap:Body></soap:Envelope>

Мне нужно разобрать TICKETHASH, который затем используется в следующем запросе.

Я могу вручную разбор строки, поиск чего-нибудь между <Ticket> и </Ticket> но он чувствует себя очень взломанным, а не правильным способом справиться с этим.

Я попытался использовать $xml = simplexml_load_string($response); но он возвращает пустой объект simplexml.

  • 0
    Интересно, что такое $result , потому что SoapClient уже позаботился о том, чтобы разобрать XML для вас, в SOAP XML используется для транспорта.
Теги:
soap

1 ответ

-2
Лучший ответ

simplexml_load_string возвращает объект класса SimpleXMLElement, который затем можно использовать для перемещения XML для анализа тега, который вы хотите.

Это делается немного сложнее, поскольку <Ticket> находится в пространстве имен http://technet.rapaport.com/. Однако вы можете использовать следующее:

$xml = simplexml_load_string($str);
$xml->registerXPathNamespace('technet', 'http://technet.rapaport.com/');
$ticket = $xml->xpath('//technet:Ticket');
$ticket_hash = (string)$ticket[0];

print_r($ticket_hash);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню