tag node name domnodelist child attribute array php html dom

name - php dom child node



PHP DOM obtener nodevalue html?(sin quitar etiquetas) (2)

En lugar de:

echo $entry->nodeValue;

Tienes que usar:

echo $doc->saveXML($entry);

Aquí hay un ejemplo más completo de mí mismo que también podría ayudar a otros, $doccontent es el bloque HTML como una cadena:

$doccontent = ''<html> …''; // your html string $dom = new DOMDocument; $internalErrors = libxml_use_internal_errors(true); // prevent error messages $content_utf = mb_convert_encoding($doccontent, ''HTML-ENTITIES'', ''UTF-8''); // correct parsing of utf-8 chars $dom->loadHTML($content_utf); libxml_use_internal_errors($internalErrors); // prevent error messages $specialdiv = $dom->getElementById(''xdiv''); if(isset($specialdiv)) { echo $dom->saveXML($specialdiv); }

Estoy tratando de obtener el código interno de las etiquetas div en un archivo usando nodeValue, sin embargo, este código solo genera texto sin formato y parece eliminar todas las etiquetas html del interior del div. ¿Cómo puedo cambiar este código para generar el contenido HTML de la división y no el texto sin formato, Y también generar la división principal que contiene los elementos secundarios?

Ejemplo:

contenido de file.txt:

<div class="1"><span class="test">text text text</span></div> <div class="2"><span class="test">text text text</span></div> <div class="3"><span class="test">text text text</span></div>

script.php:

$file= file_get_contents(''file.txt''); $doc = new DOMDocument(); @$doc->loadHTML(''<?xml encoding="UTF-8">''.$file); $entries = $doc->getElementsByTagName(''div''); for ($i=0;$i<$entries->length;$i++) { $entry = $entries->item($i); echo $entry->nodeValue; }

salidas: texto texto texto texto texto texto texto texto

Lo que necesito para dar salida:

<div class="1"><span class="test">text text text</span></div> <div class="2"><span class="test">text text text</span></div> <div class="3"><span class="test">text text text</span></div>

Tenga en cuenta que los div principales (..etc) son necesarios para que se envíen también para envolver las etiquetas span ...

¡AYUDA!


Nunca he hecho lo que intentas hacer, pero como una puñalada en la oscuridad, utilizando los documentos API, echo $ entry-> textContent; ¿trabajo?

Añadiendo una actualización. Esto es de los comentarios ubicados en la página de documentos para DOMNode :

¡Hola!

Combinando todos los comentarios, la forma más fácil de obtener el HTML interno del nodo es usar esta función:

<?php function get_inner_html( $node ) { $innerHTML= ''''; $children = $node->childNodes; foreach ($children as $child) { $innerHTML .= $child->ownerDocument->saveXML( $child ); } return $innerHTML; } ?>

O, tal vez, un método más simple es simplemente hacer:

echo $domDocument->saveXML($entry);