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