[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

Простой PHP парсер XML

Здесь я хочу затронуть очень актуальную на данный момент тему - разбор XML файлов. Почему то в сети понятного мануала на эту тему нет (а может я просто плохо искал =/). Так что я решил написать, так сказать "пособие для чайников" по парсингу XML на языке PHP. Все предложения и пожелания просьба отправлять на емейл или писать в форум Сам код, представленный ниже, снабжен подробными комментариями, так что, я надеюсь, все всем будет понятно.

<?php
/*возьмем в качестве примера - новости с сайта МТС. Пусть там формат RSS,
но без разницы: rss - это тот же XML */
$link = "http://www.mts.ru/news/rss/";
$depth = array(); //глубина вложенных тегов

/* функции startElement, endElement и characterData определяются программером.
В них описано что делать с открывающим тегом, закрывающим и данными между ними соответсвенно. */
function startElement($parser, $name, $attrs)
{
global
$depth,$intag,$dist; /* $intag - внутри ли тега мы находимся. $dist (data exist) -
есть ли между тегов данные. */
$dist=0;
if(
$intag==1) echo "<br>"; //если в теге, то новая строка.
for ($i = 0; $i < $depth[$parser]; $i++) // отступ для наглядности
  
echo "<font color=ffffff>$i</font>";
echo
"[$name]";
$depth[$parser]++;
$intag=1; // - теперь уже точно в теге.
}

function
endElement($parser, $name)
{
global
$depth,$intag,$dist;
$depth[$parser]--;
if (
$dist==0) //если нет данных, то делаем отступ, соответсвующий глубине (для наглядности)
{
  for (
$i = 0; $i < $depth[$parser]; $i++)
   echo
"<font color=ffffff>$i</font>";
}
$intag=0; //закрылся тег
$dist=0; //и данные
echo "[/$name]<br>";
}

function
characterData($parser, $data)
{
global
$dist,$intag;
echo
"<font color=ff0000>$data</font>";
if (
$intag ==1) //если в теге, то есть данные.
  
$dist=1;
}

//создаем парсер
$xml_parser = xml_parser_create();
//определяем функции открывающего и закрывающего тегов
xml_set_element_handler($xml_parser, "startElement", "endElement");
//и данных
xml_set_character_data_handler($xml_parser, "characterData");
//отключаем включенный по умолчанию верхний регистр
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);

if (!(
$fp = fopen($link, "r"))) die("could not open XML input");

//собственно парсинг
while ($data = fread($fp, 4096))
{
if (!
xml_parse($xml_parser, $data, feof($fp)))
  die(
sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
//не забываем очистить парсер
xml_parser_free($xml_parser);
?>


Автор: Юферев Денис.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 4301 сегодня - 1

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 4147 сегодня - 3

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 3996 сегодня - 0

No spam.php
10-11-2009   

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

Кол. просмотров: общее - 4034 сегодня - 1

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4020 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects