PHP: parsing di HTML5 con l'estensione DOM

PHP: parsing di HTML5 con l'estensione DOM

L'introduzione di HTML5 sul Web non ha sinora incontrato una pronta risposta da parte degli implementatori di PHP, in quanto l'estensione DOM di PHP non riconosce HTML5 e i suoi elementi. Il metodo DOMDocument::loadHTMLFile(), infatti, restituisce immediatamente un errore non appena incontra il DOCTYPE HTML5. Tuttavia, una soluzione proposta su Stack Overflow di fatto aggira il problema: possiamo usare il metodo DOMDocument::loadXML() passandogli il documento HTML5 come stringa. Per funzionare questa soluzione richiede che il documento di destinazione non sia malformato e che venga utilizzata la notazione XHTML per gli elementi vuoti. Vediamo insieme i dettagli di questa soluzione.

Possiamo usare questa tecnica in un'applicazione pratica che reperisce alcuni dati da un documento HTML5 remoto:


function getCSSTests() 
{

    $dom = new DOMDocument();
    $file = @file_get_contents('http://www.css-zibaldone.com/test/index.html');
    
  if($file) {
    
    $dom->loadXML($file);
    
    $ul = $dom->getElementsByTagName('ul')->item(3);
    $li = $ul->getElementsByTagName('li');
    
    $html = '<ul>';
    
    foreach($li as $item) {
    
    	$a = $item->firstChild;
    	$href = $a->getAttribute('href');
    	$text = $a->firstChild->nodeValue;
    	
    	$html .= '<li><a href="' . $href . '">' . $text . '</a></li>';
    
    }
    
	$html .= '</ul>';
	
	echo $html;
  }
	
}

Ho utilizzato questa funzione nella pagina dedicata ai test CSS di questo sito.

Torna su