2011-03-26 141 views
1

我试图显示位于<div class="post">中的所有链接。我的页面里面有很多<div class="post">(这是一个博客)。但是,每个<div class="post">中都有很多链接,但我想要显示每个div的第一个。 我的问题是如何限制我的代码只显示第一个,并继续下一个div? 下面是我的代码,获取并显示所有链接。格拉西亚斯!获取foreach循环的第一个结果

<?php 
$dom = new DOMDocument; 
libxml_use_internal_errors(TRUE); 
$dom->loadHTMLFile('http://www.mydomain.com/'); 
libxml_clear_errors(); 

$xPath = new DOMXPath($dom); 
$links = $xPath->query('//div[@class="post"]/a/@href'); 
foreach($links as $link) { 
    printf("%s \n", $link->nodeValue); 
} 
?> 
+0

我不知道如果选择('$ xPath-> query')需要像':第一child' ... – JCOC611 2011-03-26 21:15:11

+0

我会对投票的原因感到好奇...... – Buggabill 2011-03-26 21:35:06

回答

0

:)

$xPath = new DOMXPath($dom); 
$links = $xPath->query('//div[@class="post"]/a/@href'); 
$i = 1; 
foreach($links as $link) { 
    printf("%s \n", $link->nodeValue); 
    if($i == 1) break; 
} 
+0

在这种情况下,您甚至不需要'$ i = 1;'和'if($ i == 1)break;'。你可以在printf后面做一个'break'。 :) – smottt 2011-03-26 22:48:39

-1

您现在searchig一个DIV中的各个环节,所以在$链接中的数据不包含任何信息在所有什么div的链接出错。要查找每个div中的第一个链接,您首先必须查询(以某种方式)所有div。随后的foreach DIV发现在div所有链接并选择第一个(或如有可能,立即选择在该分区的第一个链接。

您可以通过DOM对象或通过XPATH可能得到的div的数组。

0

我想显示每一个div的第一[链接]。

下在每个div的

//div[@class="post"]/descendant::a[1]/@href 

如果你想只接受它们的div直接子链接的请求只从第一链接href秒(在任何深度),然后从上面删除descendant::

因此,类似于现有的代码时,PHP可能看起来像

$links = $xPath->query('//div[@class="post"]/descendant::a[1]/@href'); 
foreach($links as $link) { 
    printf("%s \n", $link->value); 
}