如何在 $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;
?>
现在的问题是,如果我正在加载的页面有一个孩子,比如图像:<div id="short-info"> <img src="picture.jpg"> Hello world </div>
,输出将只有 Hello world 而不是图像,然后是 Hello世界。
问题:
如何使代码在 div id="short-info" 中显示完整的 html,例如包括该图像而不仅仅是文本?
【问题讨论】:
【参考方案1】:您必须在节点上进行无证调用。
$node->c14n()
会给你$node
中包含的HTML。
疯了吧?我为那个掉了一些头发。
http://php.net/manual/en/class.domnode.php#88441
更新
这将修改 html 以符合严格的 HTML。最好用
$html = $Node->ownerDocument->saveHTML( $Node );
相反。
【讨论】:
【参考方案2】:您需要相当于“innerHTML”的内容,PHP 的 dom 不直接支持。一种解决方法是 PHP 文档中的 here。
另一种选择是使用您找到的$node
,将其作为新DOM 文档的***元素插入,然后在该新文档上调用saveHTML()
。
【讨论】:
以上是关于如何在 $node 中获取 html 而不仅仅是 $nodeValue [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中获取完整的 URL,而不仅仅是其中的一部分? [复制]
如何在 MariaDB/MySQL 工作台中获取 SELECT 语句的输出,以“table.column”格式命名列,而不仅仅是“column”?