2015-04-22 16 views
6

Come posso prendere un blocco di DOM per identificare la sua tag 'commento', comeGet html tra Blocca i commenti Semplice HTM DOM

<!-- start block --> 
<p>Hello world etc</p> 
<div>something</div> 
<!-- end of block --> 

sto usando semplice parser PHP DOM, ma il dottore è incompleta, http://simplehtmldom.sourceforge.net/manual.htm. Va bene se posso farlo con PHP puro.

+0

Questo è probabilmente uno dei momenti in cui è consentito usare espressioni regolari. – pguardiario

risposta

1

Puoi provare a scorrere gli elementi prima, quindi se hai trovato il commento iniziale, salta prima, quindi aggiungi un flag che avvia la concatenazione degli elementi successivi. Se si raggiunge il punto finale, interrompere la concatenazione:

$html_string = '<!-- start block --> 
<p>Hello world etc</p> 
<div>something</div> 
<div>something2</div> 
<!-- end of block --> 
<div>something3</div> 
'; 

$html = str_get_html($html_string); 
// start point 
$start = $html->find('*'); 
$output = ''; $go = false; 
foreach($start as $e) { 

    if($e->innertext === '<!-- start block -->') { 
     $go = true; 
     continue; 
    } elseif($e->innertext === '<!-- end of block -->') { 
     break; 
    } 

    if($go) { 
     $output .= $e; 
    } 
} 

echo $output; 
+0

soluzione cool, solo loop e abbina! –

+0

@EltonJamie yeah continua a ottenere quelli dopo che la bandiera è iniziata, una volta che il finale è stato trovato, quindi 'rompi ' – Ghost