Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 22

Тема: Обработка XML-ответов на сайте

  1. #1
    Новичок
    Регистрация
    11.12.2013
    Адрес
    Ростов
    Сообщений
    1
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)

    Post Обработка XML-ответов на сайте

    Добрый день! Хотелось бы разобрать пример процесса общения с сервером.
    Посылаю запрос(GetMovies), получаю xml-ответ. Хочу узнать названия фильмов в ответе. Но в хмл строке это закомменчено: <name><!--[CDATA[Starперцы]]--></name>
    Почему так и как с этим справиться? str_replace не помогает))
    При общении с сервером использую следующие конструкции (может кому пригодятся):
    PHP код:
    //отправка запроса
    fwrite($fp$str_query);
    $n fgets($fp,11);    
    fgets($fp,2);       
    $s fgets($fp,$n+1);$xml=$s;               
    fclose($fp); 
    PHP код:
    //обработка ответа, преобразование в массив
    $xml=simplexml_load_string($xml);

    function 
    objectsIntoArray($arrObjData$arrSkipIndices = array())
    {
    $arrData = array();

    // if input is object, convert into array
    if (is_object($arrObjData)) {
    $arrObjData get_object_vars($arrObjData);
    }

    if (
    is_array($arrObjData)) {
    foreach (
    $arrObjData as $index => $value) {
    if (
    is_object($value) || is_array($value)) {
    $value objectsIntoArray($value$arrSkipIndices); // recursive call
    }
    if (
    in_array($index$arrSkipIndices)) {
    continue;
    }
    $arrData[$index] = $value;
    }
    }
    return 
    $arrData;


    //Пример обращения к id
    echo $arrXml[Data][Movies][Movie][0]['@attributes'][ID]; 
    Отступы не переносятся в сообщение, извините...
    С радостью узнаю более простые варианты)))
    Последний раз редактировалось Octo; 11.12.2013 в 22:37.

  2. #2
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    Как то странно...
    Проверил у себя на одном из объектов, в ответ на GetMovies возвращает

    <Name><![CDATA[Название фильма]]></Name>

    Проверял через SocketTest. В логах External ответ такой же...

  3. #3
    Интересующийся
    Регистрация
    29.06.2011
    Адрес
    Dnepr
    Сообщений
    46
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Подскажите пожалуйста, пишу страничку на php для внешнего протокола, да вот столкнулся с непонятной проблемой. Сразу оговорюсь, с php только знакомлюсь, не пинайте.
    Подключаюсь к модулю:
    PHP код:
    //Отправка запроса
    $ip "10.0.1.10";
    $port "9193";
    $fp fsockopen($ip$port$en$es7);
    if(!
    $fp)
                exit(
    "Connection failed. Error #".$en.": ".$es);
        else{
        
    fputs($fp$str_query);
            
    //echo ("Connection OK<br />");
            
    $xml_response "";
            
    $xml_response fgets($fp);
            
    $n fgets($fp,11);
            
    $s fgets($fp,$n+1);
            echo (
    "$xml_response");
        
    fclose($fp);
            } 
    ответ ожидается вида
    Код HTML:
    0000006231&<?xml version='1.0' encoding='Windows-1251' standalone='yes'?><XML><Result>Ok</Result><Error></Error><Remark></Remark><Data><Movies><Movie ID='658'><Name><=!=[=C=D=A=T=A=[50 îòòåíêîâ ñåðîãî]=]=></Name><Duration Duration='130'>2ч 10мин</Duration><OtherName><=!=[=C=D=A=T=A=[]=]=></OtherName><SubName><=!=[=C=D=A=T=A=[]=]=></SubName><UpName><=!=[=C=D=A=T=A=[]=]=></UpName><Remark><=!=[=C=D=A=T=A=[]=]=></Remark><Picture><=!=[=C=D=A=T=A=[]=]=></Picture><Properties></Properties><Rental from_date='' to_date='' INN='' KPP='' OGRN=''><SessionCount></SessionCount><PU_NUMBER></PU_NUMBER><FullName><=!=[=C=D=A=T=A=[]=]=></FullName><ShortName><=!=[=C=D=A=T=A=[]=]=></ShortName><Address><=!=[=C=D=A=T=A=[]=]=></Address><Phone></Phone><Remark><=!=[=C=D=A=T=A=[]=]=></Remark></Rental></Movie></Movies></Data></XML>
    но отображается
    Код HTML:
    0000006231&Ok2ч 10мин
    1ч 40мин
    1ч 40мин
    ...
    То бишь все остальные элементы разметки не отображаются.
    В чём беда, подскажите пожалуйста
    Последний раз редактировалось Igoryok; 26.01.2015 в 03:47.

  4. #4
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    Ну так то все верно.

    echo ("$xml_response");
    Отдает браузеру xml полученный от шлюза. Браузер его интерпретирует, парсит и показывает вам уже только текст.

    Попробуйте так:
    echo ("<pre>$xml_response</pre>");

  5. #5
    Интересующийся
    Регистрация
    29.06.2011
    Адрес
    Dnepr
    Сообщений
    46
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Цитата Сообщение от sibgaba Посмотреть сообщение
    Ну так то все верно.


    Отдает браузеру xml полученный от шлюза. Браузер его интерпретирует, парсит и показывает вам уже только текст.

    Попробуйте так:
    echo ("<pre>$xml_response</pre>");
    Не-а. Результат тот же, только шрифт поменялся))

  6. #6
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    Какой запрос пихаете в $str_query?

    SocketTest пробовали тот же запрос сделать? Что он получает?

    В браузере - ПКМ - "показать исходный код страницы" что там будет?

  7. #7
    Интересующийся
    Регистрация
    29.06.2011
    Адрес
    Dnepr
    Сообщений
    46
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Цитата Сообщение от sibgaba Посмотреть сообщение
    Какой запрос пихаете в $str_query?

    SocketTest пробовали тот же запрос сделать? Что он получает?

    В браузере - ПКМ - "показать исходный код страницы" что там будет?
    1. В переменной запрос GetMovies
    2. В SocketTest полный вывод запроса
    3. В браузере в исходнике также полный вывод.

    Это конечно прекрасно, что в исходнике полный вывод. Но начну я работать с массивом и так же ничего не будет выводиться, кроме времени, как мне кажется.

  8. #8
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    3. В браузере в исходнике также полный вывод.
    Воооттт!!!

    Т.е. в переменной $xml_response у вас лежит полная XML структура. Но что вы видите на экране это "трудности перевода" и тут уже нужно разбираться с вашим браузером.

    Если вы запишите содержимое переменной $xml_response, например, в файл то там все будет на месте.

    Соответственно и при работе с переменной у вас все будет на месте.

  9. #9
    Интересующийся
    Регистрация
    29.06.2011
    Адрес
    Dnepr
    Сообщений
    46
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Цитата Сообщение от sibgaba Посмотреть сообщение
    Воооттт!!!

    Т.е. в переменной $xml_response у вас лежит полная XML структура. Но что вы видите на экране это "трудности перевода" и тут уже нужно разбираться с вашим браузером.

    Если вы запишите содержимое переменной $xml_response, например, в файл то там все будет на месте.

    Соответственно и при работе с переменной у вас все будет на месте.
    Аа, понял. Спасибо. А что может быть с браузером, точнее что в нём посмотреть стоит?

  10. #10
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    Я не знаю какой у вас браузер, какими тегами обрамлен ваш код и поэтому ХЗ чем тут помочь...

    Попробовал у себя открыть xml файл (IE и FireFox) в обоих случаях структура отобразилась полностью.

Похожие темы

  1. Данные сторика на сайте
    от Brambrulet в разделе StoreHouse
    Ответов: 1
    Последнее сообщение: 16.11.2013, 08:50
  2. Ответов: 4
    Последнее сообщение: 19.07.2012, 22:10

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •