2013-03-20 3 views
1

Simple HTML DOM Parser으로 DOM 트리를 탐색하는 데 도움이 필요합니다. 누군가가 어떻게 작동 하는지를 두 번째로 생각할 수 있다면, 지식이 풍부한 PHP 코더는 알아 낸 경우 빨리 알아 내야합니다. 내가 갇혀있는 곳은 내 친구의 러시아 농구 웹 사이트에서 div의 기사를 얻는 것입니다. ,foreach 루프가있는 DOM 트리 트래버스

<div id='columnsList'><div class='item'> 
    <div class='title'><a href='/ru/columns/1'>Колонка Римантаса Григаса</a></div> 
    <div class='img'> <img src='/files/columns/grigas.jpg'></div> 
    <div class='news'> 
    <a href='/ru/news/3174'>Римантас Григас: о пути на Евробаскет (0)</a> 
    <a href='/ru/news/1486'>Римантас Григас: об уходе из УГМК и о ближайших планах (1)</a> 
    <a href='/ru/news/731'>О горниле «Финала восьми» Евролиги (0)</a> 
    <a href='/ru/news/421'>О новом назначении и о сборной Украины (0)</a> 
    <a href='/ru/news/299'>О настоящем примере для подражания (0)</a> 
    </div><div style='clear:left;'></div> 
    </div> 
    <div class='item'> 
    <div class='title'><a href='/ru/columns/2'>Колонка Кирилла Натяжко</a></div> 
    <div class='img'> <img src='/files/columns/nati.jpg'> </div> 
    <div class='news'> 
    <a href='/ru/news/3618'>Кирилл Натяжко: "Хорватов мы не боимся" (2)</a> 
    <a href='/ru/news/3113'>Кирилл Натяжко: "Необоснованная критика подарила мне дополнительную мотивацию" (1)</a> 
    <a href='/ru/news/2454'>Кирилл Натяжко: "Мне нечего бояться, пускай лучше боятся меня!" (6)</a> 
    <a href='/ru/news/325'>Доброе утро, страна! (1)</a> 
    </div><div style='clear:left;'></div> 
</div> 
<div class='news'> 
//More divs and links 
이 내가 개인 '은'링크를 뽑고을 표시하지만 내가하고 싶은 것은 그들 모두의 DIV 타이틀을 얻을 것입니다 수있는 방법입니다

: 예를 들어, 다음 블로그 사업부의 모습입니다 기본적으로 모든 것을 연속적으로 가지지 않고 범주화합니다. 나는 foreach 루프에서 그것을하는 방법을 알아낼 수 없다.

다시 '뉴스'DIV에 가야
echo $col->parent()->prev_sibling()->prev_sibling()->a; 

는 다음 다른 노치 업 'IMG'를 div에하고 다시 '제목'div에 최대 :

foreach ($html->find('div[class=item] a[href*=news]') as $col){ 
    echo $col.'<br>'; 
} 

나는 첫 번째 에코와 함께 추가 시도 . 첫 번째 div = title의 링크가 있어야합니다. 하지만 나는 아무것도 얻지 못합니다. 이것을 할 수있는 방법이 있습니까?

답변

0

이 그것을 할 수있는 방법, 배열을 사용하지 않고!

foreach ($html->find('div[class=item]') as $item){ 
    echo $item->children(0)->plaintext; 
    foreach ($item->find('a[href*=news]') as $col){ 
     echo $col.'<br>'; 
    } 
} 

원하는 결과를 얻었습니다!

2

이 시도 :

$output = array(); 
foreach($html->find('div[class=item]' as $item) { 
    $title = $item->find('div[class=title] a', 0)->innertext; 
    $output[$title] = array(); 
    foreach($item->find('div[class=news] a') as $link) { 
     $output[$title][] = $link->innertext; 
    } 
} 
+0

아무것도 소스 코드가 비어 있습니다. 그걸 통해 나를 말해 줄 수 있니? 당신이 말하는 것은 foreach 아이템 클래스이고, 첫 번째 링크를 얻고, 맞습니까? 그런 다음 출력 배열을 해당 제목 'a'링크로 설정하고 해당 제목 div 내에서 반복 만합니까? 나는 배열과 지금 고투하고있다. – denikov

+0

Duh, 비어있다. echo 문이 없기 때문입니다. echo 문으로 업데이트 할 수 있습니까? 출력 [$ 제목] []을 에코할까요? – denikov

+0

'var_dump ($ output);'을 사용하면 끝에 포함 된 내용을 볼 수 있습니다. – aram90