使用 XML 通过 PHP 创建 HTML 链接


use xml to create html links using php

我想做的是根据XML文档为我的网站创建链接。例:

<menu>
  <item>
    <name>Menu Item One</name>
    <itemurl>folder'location'page.php</itemurl>
    <caption>This text to be applied to the 'title' attribute</caption>
  </item>
...
</menu>

我希望每个"项目"都是网站上的一个链接。菜单将是它自己的页面,并入具有"包含"功能的网站。这样,我只需编辑XML文件即可添加/删除菜单项。如果我需要以不同的方式格式化XML并不是什么大问题,特别是如果它可以比我想象的更容易完成。我希望导航菜单位于页面顶部的表中,只有一行,每个链接都位于自己的数据单元内。出于测试目的,所有文件都将位于一个公共文件夹中;索引.php(包括菜单.php(、菜单.php、菜单.xml...我不确定还需要哪些其他信息。

理想情况下,每个项目的结果应如下所示:

<td class="menuitem">
  <a href=$ItemURL title=$Caption>$ItemName</a>
</td>

有关此主题的任何帮助将不胜感激。我在PHP和XML上找到了一些文本,但无法弄清楚这个特定的任务。如果我以某种方式错误地发布了,对所有版主表示歉意。

你想使用 PHP 函数 simplexml_load_file 它将 XML 转换为一个对象。

http://php.net/manual/en/function.simplexml-load-file.php

<?php
$myMenu = simplexml_load_file('menu.xml');
echo $myMenu->item[0]->itemurl;
?>

您可以使用 foreach 循环浏览这些项目。

您可以使用 PHP 作为模板引擎,并在以具有迭代功能的多维对象的形式显示它之前加载 xml 文件,就像 SimpleXMLElement 一样:

$menu = simplexml_load_file('menu.xml');
require('menu_script.php');

在菜单脚本中,您只需访问 $menu 变量以用于显示目的:

<table>
    <tr>
        <?php foreach($menu->item as $item) { ?>
            <td class="menuitem">
                <a href="<?= htmlspecialchars($item->itemurl); ?>"
                   title="<?= htmlspecialchars($item->caption); ?>"
                >
                    <?= htmlspecialchars($item->name); ?>
                </a>
            </td>
        <?php } ?>
    </tr>
</table>

这可以通过包装菜单视图脚本的要求来进一步改进,以便只有局部变量可以访问(例如:带有"副作用"的include((/require((是一种不好的做法吗?(。

此外,可以修饰视图对象$menu,以自动提供正确编码的数据以供在 HTML 中使用。装饰 SimpleXMLElement 在 Stackoverflow 本身中没有很好地介绍,但在一些与 SimpleXML 相关的问题中被引用。

作为推出所有这些的替代方案,我可以想象像 mustache 这样的简单模板语言可以很好地与 SimpleXMLElement 配合使用,自动提供开箱即用的正确编码数据或更少的键入(mustache 有一些转义功能(,但我从未测试过,所以这只是对沙盒的建议,并概述了您也应该寻找现有的东西。