2017-03-29 1 views
1

블록이 있지만 속성이없는 <h2> 블록이 있습니다. 그 후에는 속성없이 <p>의 블록으로 이동하십시오. 이것의PHP 간단한 HTML DOM 파서 - 블록 반복을 사용하는 방법

구조는 다음과 같이 보았다 :

<h2></h2> 
<p></p> 
<p></p> 
<p></p> 
<h2></h2> 
<p></p> 
<p></p> 
<h2></h2> 
<p></p> 

내가 PHP는 간단한 HTML DOM 파서를 사용하고 있습니다. 나는 <h2> 블럭으로부터 데이터를 얻고 싶습니다, 그 후에는 모두 <p>을 또 다른 하나는 <h2>입니다.

하지만 모두 <h2><p>에 연결해야합니다. key => value (예 : <h2> => <p>,<p>,... 및 다른 <h2>)을 사용하려고 생각했지만이 작업을 수행하는 방법을 잘 모르겠습니다.

또한 약 next_sibling()에 대해 알고 있지만 루프에서 사용하는 방법을 모릅니다. 나는 2 개의 변수를했는데, 첫째는 모두 <h2>이고, 두번째 변수는 <p>입니다. 내 목표에 도움이 될 수 있다고 생각했습니다.

$test = file_get_html('url'); 
foreach($test->find('h2') as $test2) { 
    echo $test2 . '<br>'; 
    foreach($test->find('p') as $test3) { 
    echo $test3 .'<br>'; 
    } 
} 
+0

Robin Mackenzie, 내 질문을 편집 해 주었다.) –

답변

1

그것은 여기 당신이 찾고있는 슈퍼 분명하지 않다 그러나 당신이 시작하는 아이디어 것 : 여기 내 질문의

foreach($html->find('h2') as $el){ 
    $h2 = $el; 
    while($el = $el->next_sibling()){ 
    if('p' != $el->tag) break; 
    // do something 
    } 
} 
+0

고맙습니다. 코드가 도움이됩니다.) –

0

답변 여기에 코드입니다. 나는 누군가를 도울 수 있기를 바란다!)

`foreach ($html->find('.div') as $div) 
    { 
     if(!$next=$div->next_sibling()) continue; 
      if($next->tag==='h2') 
      { 
       $h2 =$next; 
       echo $h2; 

       while ($h2 = $h2->next_sibling()) 
       { 
        if(!$h2->tag=='p') break; 
        { 
         $p =$h2; 
         echo $p; 
        }  
       } 
       while ($h2 = $h2->next_sibling()) 
       { 
        if(!$h2->tag=='table') break; 
        { 
         $tab =$h2; 
         echo $tab; 
        }  
       } 
       while ($h2 = $h2->next_sibling()) 
       { 
        if(!$h2->tag=='ul') break; 
        { 
         $ul =$h2; 
         echo $ul; 
        }  
       } 
      } 
      else continue; 
    }`