PHP的DOM如何获取nodevalue的HTML?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我试图使用nodeValue在文件中获取div标记的innerhtml,但是这段代码只输出纯文本,并且似乎从div中删除了所有html标记。如何更改这段代码以输出div的HTML内容而不是纯文本,以及如何输出包含其子元素的主div。

例子:

文件内容:

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

输出:text text texttext text texttext text text

我需要它输出:

<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>
提问于
用户回答回答于

综合所有的注释,获得节点的内部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);
用户回答回答于

代替:

echo $entry->nodeValue;

你必须使用:

echo $doc->saveXML($entry);

下面是一个更完整的例子,可以帮助别人,$doccontentHTML块是一个字符串:

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

扫码关注云+社区

领取腾讯云代金券