2011-03-26 143 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); 
}