Парсинг карты сайта 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 | Загрузок: 170
Комментарии:
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).