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

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

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

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

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

if (($sXML = @simplexml_load_file('http://www.yousoft.ru/feed/'))===false){
	echo "Ошибка получения XML.\n";
}else{
	echo "XML уcпешно получен.\n";
}
?>

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

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

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

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

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

<?php
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [version] => 2.0
        )

    [channel] => SimpleXMLElement Object
        (
            [title] => Blog YouSoft
            [link] => https://www.yousoft.ru
            [description] => SimpleXMLElement Object
                (
                )

            [lastBuildDate] => Sat, 10 Apr 2010 12:02:39 +0000
            [generator] => http://wordpress.org/?v=2.9.2
            [language] => en
            [item] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [title] => Выбираем и настраиваем хостинг на VDS/VPS серверах (Часть 1)
                            [link] => http://feedproxy.google.com/~r/yousoft/BLOG/~3/0qPZ-oeeEPo/
                            [comments] => http://www.yousoft.ru/2010/04/10/vybiraem-i-nastraivaem-xosting-na-vdsvps-serverax-chast-1/#comments
                            [pubDate] => Fri, 09 Apr 2010 17:28:26 +0000
                            [category] => Array
?>

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *