2015-04-06 30 views
0

IM期运用“PHP简单的HTML DOM解析器”这个HTML:PHP简单的HTML DOM解析器:只得到父母

<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> 

我想结果只有父“李一月底拿到“没有”子菜单“部分。 其意思是,最终的结果应该只是“测试”而不是“子测试”。 应该选择什么?

PHP代码:

foreach($html->find(".header-main .nav-menu li > a") as $menu) { 
    echo $menu->plaintext; 
} 

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

+0

谢谢你,但是这不是我 – roev

+1

它存在的作品,也许问题是“PHP简单的HTML DOM解析器”不支持>选择器? – roev

+0

啊,你是对的!幽灵的答案的第二部分绝对是要走的路。 – Joe

回答

2

作为替代方案,你可以指出从主<ul>第一第一<li>孩子,从那里,将每个目标<a>定为->children(0)

foreach($html->find('ul#menu-test-header', 0)->children() as $li) { 
    echo $li->children(0); 
} 

旁注:但是我真的建议DOMDocument + DOMXpathsimple-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

+0

一个好主意!但是,这个html有时可能会略有不同。所以我有点害怕使用这个解决方案。 – roev