PHP脚本自动将sitemap.xml转换为格式良好的可点击的sitemap.html?

时间:2014-08-16 11:44:32

标签: php html xml sitemap

我的网站的网站地图是这种格式的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.mywebsite.com//index.html</loc>
    <lastmod>2014-08-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
// ... etc.

我如何自动从此XML文件创建HTML页面,其中包含针对我网站访问者的格式良好的可点击的站点地图?理想情况下,这应该是一个PHP脚本,它将所需的HTML输出到浏览器。

编辑:我创建了一些代码,您可以在已接受的解决方案中查看。如何优化此代码?

1 个答案:

答案 0 :(得分:0)

到目前为止,没有人提供解决方案,我编写了自己的解决方案:

<?php

$thisbasedir = '../mywebsite/';
$dom = new DomDocument();
$dom->load($thisbasedir . "sitemap.xml");
$data = $dom->getElementsByTagName('loc');

echo '<!DOCTYPE html>';
echo '<HTML>';
echo '<HEAD>';
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
echo '</HEAD>';
echo '<BODY>';
echo ("<table>");

foreach ($data as $node)
{
    echo '<tr>';
    $thisurl = $node->textContent;
    $thisbasename = basename($thisurl);
    $thistitle = get_title_tag_from_htmlpage($thisbasedir . $thisbasename);
    $thisdescription = get_description_from_htmlpage($thisbasedir . $thisbasename);
    echo ("<td>" .
          '<a href="' . $thisurl . '">' .
              $thistitle . ' (' . $thisdescription . ')' .
          '</a>' .
          "</td>");
    echo '</tr>';
}

echo ("</table>");
echo '</BODY>';
echo '</HTML>';

function get_description_from_htmlpage($ahtmlfile)
{
    $tags = get_meta_tags($ahtmlfile);
    $thisdescription = $tags['description'];
    if (isset($thisdescription))
        return $thisdescription;
    else
        return 'No description';
}

function get_title_tag_from_htmlpage($ahtmlfile)
{
    $thisfilecontents = file_get_contents($ahtmlfile);
    if (preg_match('/<title>(.+)<\/title>/', $thisfilecontents, $matches) && isset ($matches[1]))
        return $matches[1];
    else
        return "No Title";
}

?>