首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP和XML的树形菜单

使用PHP和XML的树形菜单
EN

Stack Overflow用户
提问于 2013-02-09 02:06:23
回答 1查看 1.1K关注 0票数 0

我正在尝试用PHP和XML制作一个树形菜单。

代码语言:javascript
复制
    <MARKET>
      <weapons>
        <class title="Bagi Warrior" div="bagi">
          <weapon name="Gauntlet" div="gauntlet">
          </weapon>
        </class>
        <class title="Segita Hunter" div="hunter">
          <weapon name="Bow" div="bow">
          </weapon>
          <weapon name="Crossbow" div="xbow">
          </weapon>
          <weapon name="Dagger" div="dagger">
          </weapon>
        </class>
        <class title="Incar Magician" div="mage">
          <weapon name="Wand" div="wand">
          </weapon>
          <weapon name="Staff" div="staff">
          </weapon>
        </class>
        <class title="Azure Knight" div="ak">
          <weapon name="1h Axe" div="1ha">
          </weapon>
          <weapon name="2h Axe" div="2ha">
          </weapon>
          <weapon name="1h Mace" div="1hm">
          </weapon>
          <weapon name="2h Mace" div="1hm">
          </weapon>
          <weapon name="1h Sword" div="1hs">
          </weapon>
          <weapon name="2h Sword" div="1hs">
          </weapon>
          <weapon name="Shield" div="shield">
          </weapon>
        </class>
        <class title="Vicious Summoner" div="summy">
          <weapon name="Twin Blades" div="tb">
          </weapon>
          <weapon name="Staff" div="staff">
          </weapon>
        </class>
        <class title="Segnale" div="seg">
          <weapon name="Whip" div="whip">
          </weapon>
        </class>
        <class title="Aloken" div="alo">
          <weapon name="Spear" div="spear">
          </weapon>
        </class>
        <class title="Seguriper" div="ripper">
          <weapon name="Scythe" div="scythe">
          </weapon>
        </class>
        <class title="Concerra Summoner" div="concerra">
          <weapon name="Duel Blades" div="db">
          </weapon>
          <weapon name="Staff" div="staff">
          </weapon>
        </class>
        <class title="Black Wizard" div="wizard">
          <weapon name="Orb" div="orb">
          </weapon>
        </class>
        <class title="Half Bagi" div="hb">
          <weapon name="Great Falchion" div="gf">
          </weapon>
          <weapon name="Katar" div="katar">
          </weapon>
        </class>
      </weapons>
    </MARKET>

和我正在尝试使用的PHP:

代码语言:javascript
复制
<?php $xml = simplexml_load_file('market.xml'); ?>
<ul>
  <?php
    foreach ($xml->weapons->class as $classes) {
      $class = $classes["title"];
      $div = $classes["div"]; 
  ?>
  <li><a onClick="document.getElementById('<?=$div ?>').style.display=(document.getElementById('<?=$div ?>').style.display =='none')?'':'none'"><?=$class?></a></li>
    <div id="<?=$div ?>" class="tree" style="display:none">
      <ul>
        <?php
        foreach ($xml->weapons->$classes->weapon as $cl_weapon) {
          $weapon = $cl_weapon["name"];
          $weap_div = $cl_weapon["div"];
        ?>
        <li><a onClick="document.getElementById('<?=$weapon ?>').style.display=(document.getElementById('<?=$weapon ?>').style.display =='none')?'':'none'"><?=$weapon ?></a></li>
    <li>
      <div id="<?=$weap_div ?>" style="display:none">
        <ul>
          <?php
            foreach ($xml->weapons->$classes->$cl_weapon->item as $item) {
              $name = $item->name;
              $level = $item->level;
              echo "<li><a name='".$name."' level='".$level."'>".$name." (".$level.")</a></li>";
            }
          ?>
        </ul>
      </div>
    </li>
    <? } ?>
  </ul>
</div>
  <? } ?>
</ul>

预期结果应该是:

代码语言:javascript
复制
Bagi Warrior
->Gauntlet
--->Item (not in XML yet)
--->Item
Segita Hunter
->Bow
--->Item (not in XML yet)
--->Item
->Crossbow
--->Item
--->Item

到目前为止,它给了我所有的主要项目(Bagi,Hunter等),但当我单击显示该项目的子项目(gauntlets,弓,十字弓等)时,它给我这样的错误:警告:在第14行的test.php中为foreach()提供了无效的参数。

我知道这跟$classes有点关系

代码语言:javascript
复制
foreach ($xml->weapons->$classes->weapon as $cl_weapon) {`

我只是想不出其他方法来让孩子们只进入那个部分(如果这有意义的话)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-09 03:04:22

这样啊,原来是这么回事。我需要从$classes开始,并从那里开始。正确的编码:

代码语言:javascript
复制
<?php $xml = simplexml_load_file('market.xml'); ?>
<ul>
  <?php
    foreach ($xml->weapons->class as $classes) {
      $class = $classes["title"];
      $div = $classes["div"]; 
  ?>
  <li><a onClick="document.getElementById('<?=$div ?>').style.display=(document.getElementById('<?=$div ?>').style.display =='none')?'':'none'"><?=$class?></a></li>
    <div id="<?=$div ?>" class="tree" style="display:none">
      <ul>
        <?php
        foreach ($classes->weapon as $cl_weapon) {
          $weapon = $cl_weapon["name"];
          $weap_div = $cl_weapon["div"];
        ?>
        <li><a onClick="document.getElementById('<?=$weapon ?>').style.display=(document.getElementById('<?=$weapon ?>').style.display =='none')?'':'none'"><?=$weapon ?></a></li>
    <li>
      <div id="<?=$weap_div ?>" style="display:none">
        <ul>
          <?php
            foreach ($cl_weapon->item as $item) {
              $name = $item->name;
              $level = $item->level;
              echo "<li><a name='".$name."' level='".$level."'>".$name." (".$level.")</a></li>";
            }
          ?>
        </ul>
      </div>
    </li>
    <? } ?>
  </ul>
</div>
  <? } ?>
</ul>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14778691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档