Posted in

Uso de DOMDocument en PHP

Para parsear contenido HTML podemos usar la clase DOMDocument. Con ella podremos buscar elementos, añadir atributos, etc…

// Nos creará en el código de salida la estructura HTML (html, head, body…)

$dom = new \DOMDocument;
        $internalErrors = libxml_use_internal_errors(true);
        $dom->loadHTML($html);
        libxml_use_internal_errors($internalErrors);

        $divs = $dom->getElementsByTagName('div');
        foreach ($divs as $item) {
            if($item->hasAttribute('variationid') && $item->getAttribute('variationid') == '00000') {
                $item->setAttribute('variationid', $format->variation_id);
            }
            if($item->hasAttribute('variation')){
                $item->setAttribute('variation', $format->variation);
            }
        }

        $imgs = $dom->getElementsByTagName('img');
        foreach($imgs as $item){
            $item->setAttribute('alt', $format->alt);
        }

        $hrefs = $dom->getElementsByTagName('a');
        foreach($hrefs as $item){
            $item->setAttribute('title', $format->alt);
        }

        echo $dom->saveHTML();

// No nos creará una arbol html en la salida, respetará nuestra estructura (observar que en el loadHTML añadimos estos parámetros: LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD

$dom = new \DOMDocument;
        $internalErrors = libxml_use_internal_errors(true);
        $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
        libxml_use_internal_errors($internalErrors);

        $divs = $dom->getElementsByTagName('div');
        foreach ($divs as $item) {
            if($item->hasAttribute('variationid') && $item->getAttribute('variationid') == '00000') {
                $item->setAttribute('variationid', $format->variation_id);
            }
            if($item->hasAttribute('variation')){
                $item->setAttribute('variation', $format->variation);
            }
        }

        $imgs = $dom->getElementsByTagName('img');
        foreach($imgs as $item){
            $item->setAttribute('alt', $format->alt);
        }

        $hrefs = $dom->getElementsByTagName('a');
        foreach($hrefs as $item){
            $item->setAttribute('title', $format->alt);
        }

        echo $dom->saveHTML();

Para evitar problemas con los caracteres especiales, añadiremos la propiedad encoding y la carga la la codificaremos con utf8_decode:

$dom = new \DOMDocument;
$dom->encoding = 'utf-8';
        $internalErrors = libxml_use_internal_errors(true);
        $dom->loadHTML(utf8_decode($html));

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.