Я получаю ответ XML, который не могу разобрать. Вот в чем дело:
<?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>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Exception occurred</faultstring>
<faultactor>https://services.lso.com/partnershippingservices/v1_5/PricingService.asmx</faultactor>
<detail>
<webServiceException xmlns = "https://services.lso.com/WebServiceException/v1">
<code>600121</code>
<action>To zip code is outside of service area.</action>
</webServiceException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Это реакция на ошибку. Я хочу получить значения как кода, так и действия.
Я знаю, как обрабатывать ответ, когда запрос был обработан правильно, но я мало что могу сделать, когда возвращается ошибка.
Чтобы дать вам представление, вот что я делаю с ответом, с которым могу справиться:
$responseRate = simplexml_load_string($xmlRateResponse);
$getTotalCharge = $responseRate->children('http://schemas.xmlsoap.org/soap/envelope/')
->Body->children()
->EstimatePriceResponse;
$totalCharge = (float)$getTotalCharge->EstimatePriceResult->TotalCharge;
echo $totalCharge;
С его помощью я могу отобразить возвращаемый курс.
Любая помощь будет оценена по достоинству. Спасибо.






Хорошо, вот решение.
$xmlResponse = new SimpleXMLElement($errorResponse);
$xmlResponse->registerXPathNamespace('soap','http://schemas.xmlsoap.org/soap/envelope/');
$result=$xmlResponse->xpath('//soap:Fault');
foreach ($result as $body) {
echo $body->detail->webServiceException->code . "<br>";
echo $body->detail->webServiceException->action . "<br>";
}
Это вернет "600121" и "To zip code is outside of service area.", чего я и хочу.
Если вы используете
SoapClient, я рекомендую вам избавить себя от боли и страданий и взглянуть наwsdl2phpgenerator