php Карта сайта из xml в виде гиперссылок через Simplexml и SAX 

Дата публикации  Дата изменения08.12.13  Комментарии6   Просмотры2331

Парсинг карты сайта xml и сохранение/вывод в виде списка гиперссылок html.

Пример реализации с использованием возможностей Simplexml – изящный и простой способ:

<?php
/***********************************************
/* Sitemap-to-html trough SimpleXML (php) script - © «OIS» aka Coder (http://coder.hol.es)
/* This notice MUST stay intact for legal use
/* Visit http://coder.hol.es/ for this script and others.
***********************************************/
//Создание объекта и загрузка в него документа
$sxml = simplexml_load_file("sitemap.xml");
$fp = fopen('sitemap.html', 'w');// очистка/создание файла для записи
	fwrite($fp, "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />"."\n");
	fwrite($fp, "Карта сайта: ".$_SERVER["SERVER_NAME"]."\n<br />");
	fclose($fp);
foreach ($sxml->url as $link) {
	$result = ("<a href=\"{$link->loc}\">".$link->loc."</a>\n<br />");
	//echo $result; // прямой вывод
	$fp = fopen('sitemap.html', 'a+'); //записываем в файл
 fwrite($fp, $result);
 fclose($fp);
 }
echo file_get_contents("sitemap.html"); // вывод - если не нужен, закомментируйте
?>

  • Более "тяжелый" вариант через SAX:
<?php
/***********************************************
/* Sitemap-to-html trough SAX (php) script - © «OIS» aka Coder (http://coder.hol.es)
/* This notice MUST stay intact for legal use
/* Visit http://coder.hol.es/ for this script and others.
***********************************************/
// Создание парсера
$xml = xml_parser_create("UTF-8"); // Windows-1251 не поддерживается
// Назначение обработчиков начальных и конечных тегов
xml_set_element_handler($xml, "start_tag_handler", "end_tag_handler");
//  Назначение обработчика текстового содержимого
xml_set_character_data_handler($xml, "character_handler");

// Функция обработчик начальных тегов
function start_tag_handler($xml, $tag, $attributes) {
if ($tag=="LOC") {
   $fp = fopen('sitemap_s.html', 'a+');
   fwrite($fp, '<div>');
   fclose($fp);
}
if ($tag=="LASTMOD") {
   $fp = fopen('sitemap_s.html', 'a+');
   fwrite($fp, '<!--');
   fclose($fp);
   }
}
// Функция обработчик закрывающих тегов
function end_tag_handler($xml, $tag) {
if ($tag=="LOC" ) {
   $fp = fopen('sitemap_s.html', 'a+');
   fwrite($fp, '</div>');
   fclose($fp);
   }
if ($tag=="LASTMOD") {
   $fp = fopen('sitemap_s.html', 'a+');
   fwrite($fp, '-->');
   fclose($fp);
   } 
}
// Функция обработчик текстового содержимого
function character_handler($xml, $data) {
$fp = fopen('sitemap_s.html', 'a+');
   fwrite($fp, '<a href="'.$data.'">'.$data.'</a>');
   fclose($fp);
}

$fp = fopen('sitemap_s.html', 'w');
   fwrite($fp, '');
   fwrite($fp, 'Sitemap: '.$_SERVER["SERVER_NAME"]);
   fclose($fp);

// Начало парсинга
xml_parse($xml, file_get_contents("sitemap.xml"));
echo file_get_contents("sitemap_s.html");// вывод на экран - закомментируйте, если не нужно
?>

 Смотреть пример – вариант SXML

 Смотреть пример – вариант SAX

  Размер:  8,73kB | Изменен:  8.12.13 | Загрузок: 37

Бесплатные курсы

Категории

Теги: , , , , , , ,

Оцените материал:

Рейтинг: 5.0/10 (1)


КомментарииКомментарии:

    sergey37

     

    А есть варианты что бы записывать ссылки в формат тхт и в виде: <a href="http://coder.hol.es/" rel="nofollow">coder.hol.es/</a>

    coder.hol.es /* Админ */

     

    Да, можно записывать в требуемом виде, (лучше через SimpleXml) и сохранять в файл с нужным расширением.

    sergey37

     

    Неправильно написал надо записывать ссылки в виде сайт.ру сайт.ру/2 каждая ссылка с новой строки

    sergey37

     

    У меня не хочет записывать ничего записал только это: <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /> Карта сайта: 1allhairs.ru <br /> сайт на опен сервере

    coder.hol.es /* Админ */

     

    По-любому можно – просто задать условие соответствующим тегом (div, p или br).


Поля, обозначенные как *, обязательны.





Максимальная длина сообщения 900 символов. Осталось   символов

 

Старые →← Новые