【问题标题】:use xml to create html links using php使用 xml 使用 php 创建 html 链接
【发布时间】:2014-12-20 06:04:09
【问题描述】:

我想做的是根据 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 没什么大不了的,特别是如果它比我想象的更容易完成的话。我希望导航菜单位于表格内页面的最顶部,表格中只有一行,每个链接都在自己的数据单元中。出于测试目的,所有文件都将位于一个公共文件夹中; index.php(包括menu.php)、menu.php、menu.xml……我不确定还需要什么其他信息。

理想情况下,每个项目的结果应该是这样的:

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

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

【问题讨论】:

    标签: php html xml


    【解决方案1】:

    您想使用 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 循环浏览这些项目。

    【讨论】:

      【解决方案2】:

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

      $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>
      

      这可以通过包装菜单视图脚本的要求来进一步改进,以便只能访问局部变量(例如:Is include()/require() with “side effects” a bad practice?)。

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多