2017-03-29 74 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

羅賓麥肯齊,謝謝你,編輯我的問題。)) –

回答

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; 
    }`