Разбор XML-ответа с помощью пространств имен

Я получаю ответ 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;

С его помощью я могу отобразить возвращаемый курс.

Любая помощь будет оценена по достоинству. Спасибо.

Если вы используете SoapClient, я рекомендую вам избавить себя от боли и страданий и взглянуть на wsdl2phpgenerator

Sean Bright 14.06.2018 22:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, вот решение.

$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.", чего я и хочу.

Другие вопросы по теме