Парсинг карты сайта 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 | Загрузок: 173
Комментарии:
coder.hol.es /* Админ */#
Возможно, версия php (или его конфигурация) не поддерживает sxml. В примере на сайте работает – на стандартной конфигурации 5.3 и 5.4 должно работать.