SimpleXML — просто работаем с XML — разбираем XML


В этой статье мы рассмотрим написание простого RSS ридера. В первой части рассказа о SimpleXML SimpleXML – просто работаем с XML – Начало мы уже рассматривали как начать работу с SimpleXML.
Сегодня продолжим рассмотрение данного расширения.

Рассмотрим мы по шагам чтобы было понятно как вообще работать с данным расширение. Первое что нам нужно сделать, это собственно создать сам объект, вы можете использовать любой из рассмотренных ранее способов. Мы же будем использовать такой:

  1. <?php
  2. $sXML = @simplexml_load_file('http://blog.yousoft.ru/feed/');
  3. ?>

В этом коде нет ничего нового за исключением символ ‘@’ перед функцией, он необходим для отключения вывода предупреждений и сообщений об ошибках. Мы возьмем на себя обработку этих данных. Также функция simplexml_load_file возвращает или ссылку на созданный объект или логическое false. Следовательно нам необходимо проверить результат получения XML.

  1. <?php
  2. if (($sXML = @simplexml_load_file('http://blog.yousoft.ru/feed/'))===false){
  3.  echo "Ошибка получения XML.\n";
  4. }else{
  5.  echo "XML уcпешно получен.\n";
  6. }
  7. ?>

Обращаем ваше внимание на тройной знак равенства: ‘===’. Не будем вникать в подробности этого оператора, только заметим, что данный оператор сравнения требует по мимо равенства значений еще и равенство типов, то есть говоря другим языком в нашем условном операторе сравнение будет истина только тогда, когда результат функции будет иметь логический тип и значение false.

Можем запустить и посмотреть результат, если у вас не вывелась надпись «XML уcпешно получен.», внимательно проверьте код.

Далее воспользуемся функцией print_r(), чтобы посмотреть как будет выглядеть объект $sXML «изнутри».

  1. <?php
  2. if (($sXML = @simplexml_load_file('http://blog.yousoft.ru/feed/'))===false){
  3.  echo "Ошибка получения XML.\n";
  4. }else{
  5.  echo "XML уcпешно получен.\n";
  6.  print_r($sXML);
  7. }
  8. ?>

Если у вас вывелось что-то подобное указанному ниже, значит вы на правильном пути. (Здесь показано только начало вывода)

  1. <?php
  2. SimpleXMLElement Object
  3. (
  4.     [@attributes] => Array
  5.         (
  6.             [version] => 2.0
  7.         )
  8.  
  9.     [channel] => SimpleXMLElement Object
  10.         (
  11.             [title] => Blog YouSoft
  12.             [link] => http://blog.yousoft.ru
  13.             [description] => SimpleXMLElement Object
  14.                 (
  15.                 )
  16.  
  17.             [lastBuildDate] => Sat, 10 Apr 2010 12:02:39 +0000
  18.             [generator] => http://wordpress.org/?v=2.9.2
  19.             [language] => en
  20.             [item] => Array
  21.                 (
  22.                     [0] => SimpleXMLElement Object
  23.                         (
  24.                             [title] => Выбираем и настраиваем хостинг на VDS/VPS серверах (Часть 1)
  25.                             [link] => http://feedproxy.google.com/~r/yousoft/BLOG/~3/0qPZ-oeeEPo/
  26.                             [comments] => http://blog.yousoft.ru/2010/04/10/vybiraem-i-nastraivaem-xosting-na-vdsvps-serverax-chast-1/#comments
  27.                             [pubDate] => Fri, 09 Apr 2010 17:28:26 +0000
  28.                             [category] => Array
  29. ?>

Мы видим, что XML файл успешно читается и даже парсится. Значит мы можем выбрать какие-либо данные. Давай определимся, что нам нужно получить название статьи (тэг title) и ссылку на эту статью (тэг link). Из вывода функции print_r() видим, что в переменая $sXML содержит свойство channel, которое в свою очередь содержит свойство item (которое нас интересует). Свойство item представляет собой массив элементов которые содержат необходимые нам данные:

  1. <?php
  2. if (($sXML = @simplexml_load_file('http://blog.yousoft.ru/feed/'))===false){
  3.  echo "Ошибка получения XML.\n";
  4. }else{
  5.  //"XML уcпешно получен.\n";
  6.  foreach($sXML->channel->item as $key=>$item){
  7.   echo $item->title.' — '.$item->link."\n";
  8.  }
  9. }
  10. ?>

Реализация получилась довольно простая и понятная: $sXML->channel->item — мы получаем сразу доступ к массиву с элементами. С помощью цикла foreach мы перебираем элементы и для каждого элемента выводим нужные нам свойства.

После прочтения данной статьи вы уже можете писать php скрипты для обработки большинства XML файлов, здесь мы не рассмотрели работу с атрибутами тэгов, но это оставим как домашнее задание или следующую публикацию.

Как обычно на последок, хочу сказать: не стесняйтесь оставлять комментарии и задавать вопросы, ведь во многом от вас зависит о чем будет написано в следующий раз..

Похожие записи:

Tags: ,

7 комментариев to “SimpleXML — просто работаем с XML — разбираем XML”

  1. Serg:

    Спасибо, статья понравилась!

  2. Serg:

    Спасибо, статья понравилась! Пишите еще…

  3. Спасибо за интересную статью! Все очень просто и понятно разобрано!

  4. VRJJ:

    Полезно, спасибо! 🙂

  5. Alex:

    А если будет другая структура XML файла?

  6. Вроде понятно всё, а как быть с XML в котором структура на кириллице?

  7. Кирилл:

    А скажите как из xml можно просто получить массив и внутри тоже чтобы объекты не создавались ? единственное что я нашел это функция array , но в этом массиве все равно остаются объекты. так как все таки сразу получить массив ?

Leave a Reply