2011-03-26 5 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

처럼 보일 수 있습니다 첫 child'을 ... – JCOC611

+0

아래 표의 이유에 대해 궁금합니다. – Buggabill

답변

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) 나누기가 필요 없습니다. printf 바로 다음에'break;를 할 수 있습니다. :) – smottt

-1

이제 사업부 내부의 각 링크에 대한 searchig, 그래서 $ 링크의 데이터가 발생했습니다 어떤 링크를 div에에 대해 전혀 정보가 포함되어 있지 않습니다. 각 div에서 첫 번째 링크를 찾으려면 먼저 모든 div에 대해 (어쨌든) 쿼리해야합니다. 그런 사업부는 사업부에있는 모든 링크를 찾을 foreach는 첫 번째를 선택 (또는 immediatly 가능하면 그 DIV의 첫 번째 링크를 선택합니다.

당신은 아마도 DOM 객체를 통해 또는 XPath를 통해 div의 배열을 얻을 수 있습니다.

0

나는 모든 사업부의 첫 번째 [링크]를 표시합니다.

다음은 div의

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

만 사업부의 직계 자녀 링크를 허용하려면 각 내에서 (어떤 깊이에서) 첫 번째 링크에서 href의 요청에 따라 그런 다음 descendant::을 제거하십시오.

따라서, 유사하게 기존의 코드는 PHP는 셀렉터 (`$ xPath-> query`)`과 같은 소요 궁금

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