Я использую «PHP Simple HTML DOM Parser» для этого HTML:
<ul id="menu-test-header" class="nav-menu">
<li>
<a href="">Test</a>
<ul class="sub-menu">
<li>
<a href="">sub test</a>
<a href="">sub test</a>
<a href="">sub test</a>
</li>
</ul>
</li>
<li>
<a href="">Test</a>
</li>
<li>
<a href="">Test</a>
<ul class="sub-menu">
<li>
<a href="">sub test</a>
</li>
</ul>
</li>
</ul>
Я хочу получить в конце результата только родитель «Ли а» без части «подменю».
Это значит, что конечный результат должен быть только «Test», а не «sub test».
Каким должен быть селектор?
Код PHP:
foreach($html->find(".header-main .nav-menu li > a") as $menu) {
echo $menu->plaintext;
}
Спасибо всем, и извините за мой плохой английский 🙂
В качестве альтернативы вы могли бы указать на первый <li>
дети из основного <ul>
во-первых, и оттуда, цель каждого <a>
как ->children(0)
,
foreach($html->find('ul#menu-test-header', 0)->children() as $li) {
echo $li->children(0);
}
Sidenote: Но я бы действительно предложил DOMDocument
+ DOMXpath
над simple-html-dom
:
$dom = new DOMDocument;
$dom->loadHTML($html_string);
$xpath = new DOMXpath($dom);
$first_list_links = $xpath->evaluate('//ul[@id="menu-test-header"]/li/a');
foreach($first_list_links as $links) {
echo $dom->saveHTML($links);
}
Других решений пока нет …