如何在 $node 中获取 html 而不仅仅是 $nodeValue [重复]

Posted

技术标签:

【中文标题】如何在 $node 中获取 html 而不仅仅是 $nodeValue [重复]【英文标题】:How to get the html inside a $node rather than just the $nodeValue [duplicate] 【发布时间】:2011-10-08 01:32:11 【问题描述】:

现状描述:

我有一个充满页面的文件夹(pages-folder),该文件夹内的每个页面(除其他外)都有一个带有id="short-info"的div。 我有一个代码可以从该文件夹中提取所有<div id="short-info">...</div> 并使用textContent 显示其中的文本(为此目的与nodeValue 相同)

加载 div 的代码:

<?php
$filename = glob("pages-folder/*.php");
sort($filename);
foreach ($filename as $filenamein) 
    $doc = new DOMDocument();
    $doc->loadhtmlFile($filenamein);
    $xpath = new DOMXpath($doc);
    $elements = $xpath->query("*//div[@id='short-info']");

        foreach ($elements as $element) 
            $nodes = $element->childNodes;
            foreach ($nodes as $node) 
                echo $node->textContent;
            
        

?>

现在的问题是,如果我正在加载的页面有一个孩子,比如图像:&lt;div id="short-info"&gt; &lt;img src="picture.jpg"&gt; Hello world &lt;/div&gt;,输出将只有 Hello world 而不是图像,然后是 Hello世界

问题:

如何使代码在 div id="short-info" 中显示完整的 html,例如包括该图像而不仅仅是文本?

【问题讨论】:

【参考方案1】:

您必须在节点上进行无证调用。

$node-&gt;c14n()会给你$node中包含的HTML。

疯了吧?我为那个掉了一些头发。

http://php.net/manual/en/class.domnode.php#88441

更新

这将修改 html 以符合严格的 HTML。最好用

$html = $Node-&gt;ownerDocument-&gt;saveHTML( $Node );

相反。

【讨论】:

【参考方案2】:

您需要相当于“innerHTML”的内容,PHP 的 dom 不直接支持。一种解决方法是 PHP 文档中的 here。

另一种选择是使用您找到的$node,将其作为新DOM 文档的***元素插入,然后在该新文档上调用saveHTML()

【讨论】:

以上是关于如何在 $node 中获取 html 而不仅仅是 $nodeValue [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中获取完整的 URL,而不仅仅是其中的一部分? [复制]

获取选择中的元素类型

如何在 HTML 视频中获取当前时间戳(不仅仅是秒)

如何在 MariaDB/MySQL 工作台中获取 SELECT 语句的输出,以“table.column”格式命名列,而不仅仅是“column”?

如何在 node.js 中获取目录大小而不递归遍历目录?

如何从 Facebook 获取活动页面,而不仅仅是数据