Синтаксический анализ XML-ответа с помощью xml-схемы

#php #xml #xsd #xml-parsing

#php #xml #xsd #xml-синтаксический анализ

Вопрос:

Редактировать Приведенный ниже код будет работать на localhost как есть, если кто-нибудь захочет скопировать и попробовать.Указанные учетные данные действительны.

У меня есть php-код, который запрашивает данные из службы API. Отправляется XML-запрос, и в ответ получаются XML-данные. Я сохранил данные respose в переменной $output . При выполнении echo $output детали в XML-ответе печатаются. Но теперь мне нужно проанализировать этот ответ и сохранить необходимые данные в переменных. Например: мне нужно сохранить $customer_id = значение из <customer_id>12345</customer_id> . Я провел тщательный поиск в Google и перепробовал все фрагменты, предоставленные разными разработчиками, но безрезультатно.

Я попробовал var_dump(simplexml_load_string($output)); , и он возвращается object(SimpleXMLElement)#1 (0) { } . Я даже пытался преобразовать XML-данные в массив.

index.php

     <?php

        $appId ="MFS149250";
        $appPass ="5TEBRPCZ";
        $brokeCode ="ARN-149250";
        $iin = "5011217983";


    $xml_data = '<?xml version="1.0" encoding="UTF-8"?>
                <NMFIIService>
                    <service_request>
                        <appln_id>'.$appId.'</appln_id>
                        <password>'.$appPass.'</password>
                        <broker_code>'.$brokeCode.'</broker_code>
                        <iin>'.$iin.'</iin>
                    </service_request>
                </NMFIIService>';



      $URL = "https://uat.nsenmf.com/NMFIITrxnService/NMFTrxnService/IINDETAILS";
                $ch = curl_init($URL);
                curl_setopt($ch, CURLOPT_MUTE, 1);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
                curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                $output = curl_exec($ch);
                //echo "<textarea>".$output."</textarea>";
                echo $output;
                var_dump(simplexml_load_string($output));
                curl_close($ch);
?>
  

Комментарии:

1. Можете ли вы добавить некоторые из попыток, которые вы пробовали?

2. var_dump плохо работает с объектами SimpleXML, поэтому не обманывайтесь, ваш объект на самом деле не пуст. Посмотрите на примеры в руководстве о том, как получить элементы в XML: php.net/manual/en/simplexml.examples-basic.php

3. SimpleXML отлично работал при использовании XML-данных без схемы. Но проблема в том, что присутствует xml-схема.

4. Попробуйте в конце использовать $xml = simplexml_load_string($output); , а затем echo $xml->asXML();

5. @NigelRen попробовал. но он выдает тот же результат, echo $output что и . Данные xml точно такие же, без изменений.