正在分析XML SOAP响应


Parsing XML SOAP response

Im正在连接到SOAP api的过程中,传递一些数据,然后读取响应。我已经收到了要发送的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对象。

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);