PHP DOM get nodevalue html?(不剥离标签)

2022-08-30 15:13:50

我正在尝试使用nodeValue获取文件中div标签的内部html,但是此代码仅输出纯文本,并且似乎从div内部剥离了所有html标签。我如何更改此代码以输出div的HTML内容而不是纯文本,并且还输出主div包装其子元素。

例:

文件的内容.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>

脚本.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 的 (..等)需要输出以及包装span标签...

帮助!


答案 1

我从来没有做过你试图做的事情,但作为黑暗中的刺痛,使用API文档,确实$entry>textContent;工作?

添加更新。这是来自DOMNode的文档页面上的评论:

你好!

结合所有注释,获取节点内部HTML的最简单方法是使用此功能:

<?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);

下面是一个更完整的示例,也可能对其他人有所帮助,是将 HTML 块作为字符串:$doccontent

$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);
}

推荐