PHP DOM получить nodevalue html? (без зачистки меток)
Я пытаюсь получить innerhtml тегов div в файле с помощью nodeValue, однако этот код выводит только обычный текст и, кажется, вытесняет весь тег html изнутри div. Как я могу изменить этот код для вывода содержимого div div, а не обычного текста, а также вывести основной div, который обертывает дочерние элементы.
Пример:
содержимое файла 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;
}
выходы: текст текст текст текст текст текст текст текст
что мне нужно для вывода:
<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>
Обратите внимание, что родительский div (..etc) необходимо вывести, а также обернуть теги span...
HELP!
Ответы
Ответ 1
Я никогда не делал то, что вы пытаетесь сделать, но как удар в темноте, используя документы API, делает echo $entry- > textContent; работать?
Добавление обновления. Это из комментариев, размещенных на странице документации для DOMNode:
Привет!
Объединяя все комментарии, самый простой способ получить внутренний HTML из node - использовать эту функцию:
<?php function get_inner_html( $node ) {
$innerHTML= '';
$children = $node->childNodes;
foreach ($children as $child) {
$innerHTML .= $child->ownerDocument->saveXML( $child );
}
return $innerHTML; } ?>
Или, может быть, более простой способ:
echo $domDocument->saveXML($entry);
Ответ 2
Вместо:
echo $entry->nodeValue;
Вы должны использовать:
echo $doc->saveXML($entry);
Вот более полный пример самого себя, который может помочь и другим, $doccontent
является блоком HTML как строка:
$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);
}