Pregunta

Estoy tratando de analizar un fragmento HTML, usando las funciones PHP DOM. He despojado todo aparte de las etiquetas de párrafo, tramo y ruptura de línea, y ahora quiero recuperar todo el texto, junto con sus estilos acompañantes.

Entonces, me gustaría obtener cada pieza de texto, uno por uno, y para cada uno puedo volver al árbol para obtener los valores de atributos particulares (solo estoy interesado en algunos específicos, como el color, etc. .).

¿Cómo puedo hacer esto? ¿O estoy pensando en eso de la manera incorrecta?

¡Gracias!

No hay solución correcta

Otros consejos

Supongamos que tiene un domdocumento aquí:

$doc = new DOMDocument();
$doc->loadHTMLFile('http://stackoverflow.com/');

Puede encontrar todos los nodos de texto usando un XPath simple.

$xpath = new DOMXpath($doc);
$textNodes = $xpath->query('//text()');

Sólo foreach sobre él para iterar sobre todos los nodos de texto:

foreach ($textNodes as $textNode) {
    echo $textNode->data . "\n";
}

De eso, puedes subir al árbol dom usando ->parentNode.

Espero que esto pueda darte un buen comienzo.

Para aquellos que se sienten más cómodos con los selectores CSS3 y están dispuestos a incluir una sola clase de PHP adicional en su proyecto, sugeriría el uso de Php Dom Php Dom Parser. La solución se vería como lo siguiente:

$html = file_get_html('http://www.example.com/');

$ret = $html->find('p, span');    
$store = array();

foreach($ret as $element) {
    $store[] = array($element->tag => array('text' => $element->innertext, 
                                            'color' => $element->color, 
                                            'style' => $element->style));
}
print_r($store);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top