PHP скрипты, MySQL, Java, документация Unix, Linux, FreeBSD, Apache, Оптимизация сайта
Библиотека компании MNWhost.RU

Web-development
Shell
PHP
Perl
Java
ASP
VB Script
HTML
XML
WML
Cookies

Документация
FreeBSD
Linux
Apache
Язык UML
Поисковые системы
Модель OSI
CGI
Технология VPN
ADSL
SSI
DNS
Протоколы
Шифрование дисков
Обжим витой пары
Маски сети/подсети

Хостинг MNW.RU
Услуги
Хостинг
Регистрация доменов
Размещение серверов
Аренда серверов


Hosted by MNW

Яндекс цитирования

Простой 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_parserXML_OPTION_CASE_FOLDINGfalse);

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

//собственно парсинг
while ($data fread($fp4096))
{
 if (!
xml_parse($xml_parser$datafeof($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);
?>


Автор: Юферев Денис.
размещение сервера