PHP Simple HTML DOM Parser:只获取父级

时间:2015-04-06 15:51:12

标签: php jquery domparser

为此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;
}

谢谢大家,抱歉我的英语不好: - )

1 个答案:

答案 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);
}

Sample Output