【问题标题】:PHP Simple HTML DOM Parser: get only the parentPHP Simple HTML DOM Parser:仅获取父级
【发布时间】:2015-04-06 15:51:11
【问题描述】:

我对这个 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;
}

谢谢大家,对不起我的英语不好:-)

【问题讨论】:

  • 谢谢,但这不适合我
  • 存在,可能问题是“PHP Simple HTML DOM Parser”不支持>选择器?
  • 啊,你是对的! Ghost的答案的第二部分绝对是要走的路。

标签: php jquery domparser


【解决方案1】:

作为替代方案,您可以首先从主要&lt;ul&gt; 中指出第一个&lt;li&gt; 子级,然后从那里将每个&lt;a&gt; 定位为-&gt;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

【讨论】:

  • 好主意!但是 html 有时可能会略有不同。所以我有点害怕使用这个解决方案。
猜你喜欢
  • 2012-08-12
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
相关资源
最近更新 更多