За последние 24 часа нас посетили 54120 программистов и 1719 роботов. Сейчас ищут 859 программистов ...

Реализация обработки ХМЛ на ПХП

Тема в разделе "Прочие вопросы по PHP", создана пользователем котяра, 22 ноя 2006.

  1. котяра

    котяра Активный пользователь

    С нами с:
    22 ноя 2006
    Сообщения:
    2
    Симпатии:
    0
    :best: Подскажите пожайлуста.... а совсем туго...
    Вообщем есть гет запрос на ай-пи-ай-ный сервер который возвращает ответ в виде хмл нужно преобразовать эт дело в нтмл.
    использовал пхп и курл библиотеку:
    1. Обработчик-парсер
    Код (Text):
    1. <?php
    2. $_url = "http://api.dozory.ru/query/?rm=person_status&person_id=248&person_id=249&person_id=252";
    3. // инициализация сеанса
    4. $ch = curl_init();
    5.  
    6. // установка URL и других необходимых параметров
    7. curl_setopt($ch, CURLOPT_URL, $_url);
    8. curl_setopt($ch, CURLOPT_HEADER, 0);
    9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    10. // загрузка страницы и выдача её браузеру
    11. $data  = curl_exec($ch);
    12. // завершение сеанса и освобождение ресурсов
    13. curl_close($ch);
    14. // Load the XML source
    15. $xml = new DOMDocument;
    16. //$xml->load('collection.xml');
    17. $xsl = new DOMDocument;
    18. $xsl->load('collection.xsl');
    19.  
    20. // Configure the transformer
    21. $proc = new XSLTProcessor;
    22. $proc->importStyleSheet($xsl); // attach the xsl rules
    23.  
    24. echo trim($proc->transformToDoc($data)->firstChild->wholeText);
    25. ?>
    2. Шаблон для преобразования collection.xsl:
    Код (Text):
    1. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    2. <xsl:template match="/">
    3.       <xsl:for-each select="content/person">
    4.       <xsl:value-of select="@id"/>
    5.       <xsl:value-of select="@status"/>
    6.       </xsl:for-each>
    7. </xsl:template>
    8. </xsl:stylesheet>
    Неработает - как еще эт мона сделать?... используется бесплатный хостинг
     
  2. котяра

    котяра Активный пользователь

    С нами с:
    22 ноя 2006
    Сообщения:
    2
    Симпатии:
    0
    такой вариант попробовал :
    Код (Text):
    1. <?php
    2. // Массив, в котором будут сохранены атрибуты из XML файла
    3. $attrib = array();
    4.  
    5. // Читаем содержимое XML файла в строковую переменную
    6. $xml = "http://api.dozory.ru/query/?rm=person_status&person_id=248&person_id=249&person_id=252";
    7. // Создаем дерево DOM XML на основе имеющегося у нас XML файла.
    8. // Заметьте, что это заняло у нас всего лишь одну строчку кода!
    9. $xml = xmldoc($xml);
    10.  
    11. // Теперь в переменной $xml у нас находится дерево объектов,
    12. // представляющее собой наш XML файл. Для того, чтобы начать
    13. // обход этого дерева - необходимо получить объект родительской node (тега).
    14. // Для нашего XML файла это будет node <content>
    15. $root = $xml->root();
    16. // Получаем массив потомков родительской node (в нашем случае это
    17. // массив <person>)
    18. $nodes = $root->children();
    19. // Начинаем обработку каждой node в массиве
    20. foreach($nodes as $node)
    21. {
    22. // Если текущая node - это одна из node <person>, то продолжаем ее обработку,
    23. // чтобы получить информацию об этой новости
    24.     if ($node->name=='person')
    25.     {
    26. // Создаем новый массив, куда будем собирать иинформацию о текущем персе
    27.         $currentStats = array();
    28. // Получаем статус для перса (он хранится в аттрибуте 'status')
    29.         $currentStats['status'] = $node->get_attribute('status');
    30. // Сохраняем текущий сатус в массиве атрибутов
    31.         $attrib[] = $currentStats;
    32.     };
    33. };
    34. ?>
    35.  
    36. <html>
    37. <head>
    38.     <title>Статус</title>
    39. </head>
    40. <body>
    41. <table width="100%" border="1">
    42. <?php
    43. foreach($news as $n)
    44. {
    45. ?>
    46. <tr>
    47.     <td width="90%"><b><?php echo $n['status']; ?></b></td>
    48. </tr>
    49. <?php
    50. };
    51. ?>
    52. </table>
    53. </body>
    54. </html>
    тош пока невышло
     
  3. Esquire

    Esquire Активный пользователь

    С нами с:
    22 мар 2007
    Сообщения:
    2
    Симпатии:
    0
    сам маюсь с такой же траблой
    найду решение отпишу
     
  4. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    А что не работает? Что пишет?
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    по быстрому разбор XML осуществляю двумя функциями.

    PHP:
    1. <?
    2. ### 440hz zone ###
    3.  
    4. ### TOOLS ###
    5.  
    6. function GetXMLFirstVal($r,$t) {
    7.         if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0];
    8.         return false;
    9. }
    10.  
    11. function GetXMLAllVal($r,$t) {
    12.         if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2];
    13.         return array();
    14. }
    15.  
    16. ### TOOLS ###
    17.  
    18. // RSS потоки
    19. // ТОЛЬКО ссылки БЕЗ параметров!
    20. // get.rss?a=b непокатит. тогда нужно юзать CURL
    21.  
    22. $RSSS = array();
    23. $RSSS[] = 'http://news.yandex.ru/computers.rss';
    24. $RSSS[] = 'http://news.yandex.ru/security.rss';
    25. $RSSS[] = 'http://news.yandex.ru/internet.rss';
    26.  
    27. // перебираем потоки
    28. foreach($RSSS AS $RSS) {
    29.  
    30.     print("\n$RSS");
    31.  
    32.     // получаем контент
    33.     $XML = file_get_contents($RSS);
    34.  
    35.     if($XML) {
    36.  
    37.         // получаеми список всех ITEM
    38.         $ITEMS = GetXMLAllVal($XML,'item');
    39.  
    40.         // перебираем ITEM
    41.         foreach($ITEMS AS $ITEM) {
    42.  
    43.             // получаем данные
    44.             $TITLE = GetXMLFirstVal($ITEM,'title');
    45.             $LINK  = GetXMLFirstVal($ITEM,'link');
    46.             $DESC  = GetXMLFirstVal($ITEM,'description');
    47.             $DATE  = GetXMLFirstVal($ITEM,'pubDate');
    48.             $CAT   = GetXMLFirstVal($ITEM,'category');
    49.  
    50.             // ver 2.0
    51.             if(!$DATE) {
    52.                 $DATE = GetXMLFirstVal($ITEM,'dc:date');
    53.             }
    54.  
    55.             // конвертим дату в unixtime
    56.             if($DATE) $DATE = strtotime($DATE);
    57.             else      $DATE = time();
    58.  
    59.             // преобразуем спецсимволы
    60.             $TITLE = html_entity_decode($TITLE,ENT_QUOTES);
    61.             $DESC  = html_entity_decode($DESC,ENT_QUOTES);
    62.             $CAT   = html_entity_decode($CAT,ENT_QUOTES);
    63.  
    64.             print("\n     [".date('d.m.Y H:i',$DATE)."] - [$TITLE]");
    65.         }
    66.     }
    67. }
    68.  
    69. // что б в шелле строку переводило ...
    70. print("\n");
    71.  
    72. ?>
    Код (Text):
    1.  
    2. gw(440hz):~$>php xml.php
    3.  
    4. http://news.yandex.ru/computers.rss
    5.      [21.03.2007 18:15] - [Частная ракета Falcon долетела до космоса]
    6.      [21.03.2007 09:00] - [Скончался создатель языка программирования Fortran]
    7.      [21.03.2007 16:33] - [В МТС новый технический директор]
    8.      [21.03.2007 10:00] - [Компьютер в клавиатуре Cybernet ZPC-945SL]
    9.      [20.03.2007 12:45] - ["Лаборатория Касперского" критикует закрытость Windows Vista]
    10.      [21.03.2007 08:45] - [Samsung Q1Ultra - следующее поколение ультракомпактных персональных компьютеров]
    11.      [21.03.2007 22:17] - [Пресс-релиз: Exigen Services StarSoft принял участие в CeBIT" 2007 в Ганновере]
    12.      [21.03.2007 08:30] - [Израильские хакеры - самые активные в мире]
    13.      [21.03.2007 16:50] - [Минсвязи прекратит выдачу лицензий на аналоговое телевещание]
    14.      [21.03.2007 02:45] - ["Комкор" на проводе]
    15.      [20.03.2007 18:15] - [Ожидается, что Palm поглотят на этой неделе]
    16.      [20.03.2007 13:45] - [СПбГУ и Microsoft подпишут соглашение о сотрудничестве]
    17.      [21.03.2007 10:45] - [Система менеджмента качества ММК прошла проверку]
    18.      [21.03.2007 22:16] - [Связьинвест: операторам нужно дать право вводить дополнительные тарифы]
    19.      [19.03.2007 19:00] - [Презентация новейших систем унифицированных коммуникаций (Unified Communications) Cisco]
    20. http://news.yandex.ru/security.rss
    21.      [21.03.2007 11:45] - [PandLabs: новый троян специально для компаний]
    22.      [19.03.2007 15:01] - [Недельный отчет Panda Software о вирусах и вторжениях]
    23.      [22.03.2007 04:30] - [ZoneAlarm 7.0.337.000 - очередное массовое обновление серии продуктов для защиты ПК]
    24.      [19.03.2007 19:16] - [Microsoft поторопилась с Live OneCare]
    25.      [19.03.2007 09:30] - [В России будет создана служба для регулирования СМИ и Интернета]
    26.      [20.03.2007 14:15] - [Компания "Доктор Веб" начала бета-тестирование двух новых продуктов]
    27.      [19.03.2007 14:03] - [Несколько уязвимостей в CA BrightStor ARCserve Backup]
    28.      [19.03.2007 17:16] - [Провайдеры продают каждый шаг своих пользователей]
    29.      [20.03.2007 00:00] - [Обход ограничений безопасности в web-app.org WebAPP]
    30.      [21.03.2007 11:45] - [PHP-инклюдинг в Monster Top List]
    31.      [19.03.2007 13:46] - [Раскрытие данных в Sun Java System Web Server]
    32. http://news.yandex.ru/internet.rss
    33.      [19.03.2007 14:01] - [Барак Обама и Хиллари Клинтон стали образцовыми блоггерами]
    34.      [20.03.2007 16:45] - [Пользователи YouTube выберут лучшие видеоролики]
    35.      [20.03.2007 16:30] - [Фальшивую невесту посадили за мошенничество в интернете]
    36.      [19.03.2007 11:16] - [Новые требования к Интернет-торговле в Беларуси вступают в силу 19 марта]
    37.      [19.03.2007 17:00] - [Microsoft раскрыла тайну дорвеев]
    38.      [19.03.2007 16:16] - [Новая услуга BT упростит переход на IP телефонию]
    39.      [21.03.2007 16:16] - ["ХИТ-ТВ" дает возможность бесплатно смотреть 77 каналов спутникового телевидения]
    40.      [19.03.2007 13:03] - [На MySpace появились зараженные страницы]
    41.      [21.03.2007 16:16] - [Интернет Удмуртии - инструмент продаж в умелых руках]
    42.      [21.03.2007 17:15] - [В Минэкономпроме РТ обсудили вопросы добровольной сертификации АЗС]
    43.      [22.03.2007 09:17] - [Молдавские леи в отечественных интернет-магазинах]
    44.      [20.03.2007 11:45] - [Закрыт крупный пиратский завод в Санкт-Петербурге]
    45.      [20.03.2007 09:45] - ["АМТ" внедряет NGN]
    46.      [20.03.2007 12:45] - [Новостной сервис Google появится на wap-портале "Билайн"]
    47.      [20.03.2007 09:45] - [WideXs вошел в состав Linxtelecom]
     
  6. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    А вы уверены что CURL вам разрешен?
    А это что за функция такая?
     
  7. Esquire

    Esquire Активный пользователь

    С нами с:
    22 мар 2007
    Сообщения:
    2
    Симпатии:
    0
    решил траблу.
    ответ смотри тут http://www.sleesh.net/2006/12/19/print: ... a_php.html
    у мну без проблем генерирует состав клана, и проверяет статус офлайн/онлайн.
    Котяра, не забудь кешировать. а то через некоторое время тя сервер пошлЁт.[/quote]