首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP DOM get nodevalue html?(不剥离标签)

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

Stack Overflow用户
提问于 2011-06-09 07:11:24
回答 2查看 29.1K关注 0票数 29

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

示例:

File.txt的内容:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
  $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;
        }

输出:文本

我需要它输出什么:

代码语言:javascript
复制
<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标记...

帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-09 07:18:48

我从来没有做过您想要做的事情,但是使用API文档暗中刺探一下,echo $entry->textContent;是否有效?

添加更新。这来自DOMNode文档页面上的注释

嗨!

结合所有注释,获取节点内部HTML的最简单方法是使用以下函数:

代码语言:javascript
复制
<?php  function get_inner_html( $node ) { 
    $innerHTML= ''; 
    $children = $node->childNodes; 
    foreach ($children as $child) { 
        $innerHTML .= $child->ownerDocument->saveXML( $child ); 
    } 

    return $innerHTML;  }  ?>

或者,也许更简单的方法是这样做:

代码语言:javascript
复制
echo $domDocument->saveXML($entry);
票数 41
EN

Stack Overflow用户

发布于 2016-11-30 04:52:12

而不是:

代码语言:javascript
复制
echo $entry->nodeValue;

你必须使用:

代码语言:javascript
复制
echo $doc->saveXML($entry);

这里有一个更完整的例子,可能对其他人也有帮助,$doccontent是一个字符串形式的HTML块:

代码语言:javascript
复制
$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);
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6286362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档