我想做的是根据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 有一些转义功能(,但我从未测试过,所以这只是对沙盒的建议,并概述了您也应该寻找现有的东西。