为此HTML使用“PHP Simple HTML DOM Parser”:
<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>
我想在结果的最后只得到没有“子菜单”部分的父“li a”。 它的意思是,最终结果应该只是“测试”而不是“子测试”。 应该选择什么?
PHP代码:
foreach($html->find(".header-main .nav-menu li > a") as $menu) {
echo $menu->plaintext;
}
谢谢大家,抱歉我的英语不好: - )
答案 0 :(得分:2)
作为替代方案,您可以首先从主<li>
指出第一个<ul>
子项,并从那里将每个<a>
定位为->children(0)
。
foreach($html->find('ul#menu-test-header', 0)->children() as $li) {
echo $li->children(0);
}
旁注:但我真的建议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);
}