Предполагая, что у вас есть только два уровня, этот код использует XPath для поиска начала каждого меню, а затем просматривает элементы <li>
. Это делает то же самое для подменю, используя текущее главное меню в качестве начальной точки и только содержимое (используя descendant::
, чтобы ограничить количество найденных узлов) ....
(мне пришлось измените HTML, поскольку в <li id="2"> <a href="2"> main menu 2 </a> </li>
)
* было добавлено <li>
*1009*. Если у вас есть список возможных идентификаторов, вы можете использовать XPath для поиска любого из них ..
//ul[@id="mainmenu" or @id="menu-main" or @id="menu-menu1"]/li
Вы можете построить это динамически из массива, если вам нужно ...
$menu_ids_arr = array('mainmenu', 'menu-main', 'menu-menu1');
$query = '//ul[';
foreach ( $menu_ids_arr as $id ) {
$query .= '@id="'.$id.'" or ';
}
$query = substr($query, 0, -4).']/li';
$mainMenus = $xp->query($query);