simplexml_load_file() - 从 xml 中生成 html 菜单

simplexml_load_file() - generate html menu out of xml

我正在尝试使用 xml 文件为 php 网站创建菜单。 XML-结构是:

<?xml version="1.0" encoding="utf-8" ?>
<MenuRoot>
    <Menu id="home" text="Startseite" url="../overview.php"></Menu>
    <Menu id="system" text="System" url="../system.php">
        <SubMenu id="system_sub1" text="Allgemein" url="../tba.php"></SubMenu>
        <SubMenu id="system_sub2" text="Abmelden" url="../logout.php"></SubMenu>
    </Menu>
</MenuRoot>

我的 PHP 代码看起来像 - 这不起作用:

if(file_exists('/var/www/content/menu.xml')) {
$xml = simplexml_load_file('/var/www/content/menu.xml');
    foreach($xml->children() as $menu) {
        echo '<li><a href="'.$menu->Menu['url'].'">'.$menu->Menu['text'].'</a>';
        if(NULL !== $menu->children()):
            echo '<ul>';
            foreach($menu->children() as $submenu) {
                echo '<li><a href="'.$submenu->SubMenu['url'].'">'.$submenu->SubMenu['text'].'</a></li>';
            }
            echo '</ul>';
        endif;
        echo '</li>';
    }
}
else:
    write_log(sprintf("menu.xml not found"));
endif;

我尝试了一些不同的方法并采用了基本的方法,效果如下:

if(file_exists('/var/www/content/menu.xml')) {
$xml = simplexml_load_file('/var/www/content/menu.xml');
echo '<li><a href="'.$xml->Menu[0]['url'].'">'.$xml->Menu[0]['text']..'</a>';
}

在我不工作的示例中,我的循环和访问变量有什么问题?

谢谢!

访问$menu->Menu['url']时,$menu已经是Menu节点,应该是$menu['url'].

您可以使用 $xml->Menu 直接访问您的菜单。然后你可以使用count()查看children的数量:

$xml = simplexml_load_file('/var/www/content/menu.xml');
foreach($xml->Menu as $menu) {
    echo '<li><a href="'.$menu['url'].'">'.$menu['text'].'</a>';

    if (count($menu->SubMenu)) {

        echo '<ul>';
        foreach($menu->SubMenu as $submenu) {
            echo '<li><a href="'.$submenu['url'].'">'.$submenu['text'].'</a></li>';
        }
        echo '</ul>';

    }
    echo '</li>';
}

输出:

<li>
    <a href="../overview.php">Startseite</a>
</li>
<li>
    <a href="../system.php">System</a>
    <ul>
        <li><a href="../tba.php">Allgemein</a></li>
        <li><a href="../logout.php">Abmelden</a></li>
    </ul>
</li>