【问题标题】:Get first li Simple DOM Parser获取第一li Simple DOM Parser
【发布时间】:2016-05-23 08:26:23
【问题描述】:

我只是尝试创建一个小的 simplephpdome
目标是

<ul id=filter><li><a href="url1"></li><li><a href="url2"></li></ul>
<ul id=filter><li><a href="url3"></li><li><a href="url4"></li></ul>

如何为每个ul 获得第一个li 结果?
这个我试过了

$html = file_get_html($url);
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$first_list_links = $xpath->evaluate('//ul[@id="filter"]/li/a');

foreach($first_list_links as $links) {
    echo $dom->saveHTML($links);
}

但仍包括所有li

【问题讨论】:

  • 在 CSS 中有一个名为 :first-of-type 的选择器,我不确定你是否可以在解析器中使用它,因为我之前从未使用过 DOM 解析器。

标签: php parsing dom


【解决方案1】:

您可以使用PHP Simple HTML DOM Parser 实现此目的:

PHP

$html = file_get_html('<ul class="filter"><li><a href="url1"></li><li><a href="url2"></li></ul><ul class="filter"><li><a href="url3"></li><li><a href="url4"></li></ul>');
$urls = [];
foreach($html->find('.filter') as $element) {
   $url = $element->firstChild()->find('a', 0)->href;
   if (!in_array($url, $urls)) {
       echo $url . "<br/>";
       $urls[] = $url;
   }
}

应该输出:

url1
url2

【讨论】:

  • 感谢它的工作 foreach($html->find('ul#filter') as $element) { echo $element->firstChild()->find("a", 0)->链接。 '
    '; }
  • @EyangMakmur 不客气 :) 你能验证我的回答吗? :)
  • 抱歉,为什么要循环两次结果 url1,url3,url1,url3?
  • 我试过了,我只得到了 Array('url1', 'url3');你能过去你的整个代码吗?
  • $html = file_get_html($url); foreach($html->find('ul#filter') as $element) echo $element->firstChild()->find("a", 0)->href.'
    '; }
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
相关资源
最近更新 更多