Я пытаюсь создать дерево меню с помощью PHP и XML.Дерево меню с использованием PHP и XML
<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 Я пытаюсь использовать:
<?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>
Ожидаемый результат должен быть:
Bagi Warrior
->Gauntlet
--->Item (not in XML yet)
--->Item
Segita Hunter
->Bow
--->Item (not in XML yet)
--->Item
->Crossbow
--->Item
--->Item
До сих пор, это дает мне все основные элементы (Bagi, Hunter и т. Д.), Но когда я нажимаю, чтобы показать детям этого предмета (рукавицы, лук, арбалет и т. Д.), Он дает мне эту ошибку: Предупреждение: неверный аргумент, предоставленный foreach() в test.php в строке 14.
Я знаю, что есть что-то делать с $classes
в
foreach ($xml->weapons->$classes->weapon as $cl_weapon) {`
Я просто не могу придумать другой способ, чтобы получить детей в только той части, хотя (если это имеет смысл).
в основном вы пытаетесь получить '$ xml-> оружие-> Segita Hunter-> weapon', которого не существует. Вам нужно проверить класс '-> weapon-> class [title = Segita Hunter]. Не уверен, как именно симплекс будет обрабатывать подобные вещи. Возможно, нужно «обновить» до полного dom. –
Я понял. Мне просто нужно начать с '$ classes' и перейти оттуда. Пример: '$ classes-> weapon'. Удерживает true и в следующем блоке foreach. – Matt