14

现状描述:

我有一个装满页面的文件夹(pages-folder),该文件夹内的每个页面(除其他外)都有一个带有id="short-info".
我有一个代码可以<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;
            }
        }
}
?>

现在的问题是,如果我正在加载的页面有一个孩子,比如 image: <div id="short-info"> <img src="picture.jpg"> Hello world </div>,输出只会是Hello world而不是 image 然后是Hello world

问题:

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

4

2 回答 2

39

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

$node->c14n()会给你包含在$node.

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

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

更新

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

$html = $Node->ownerDocument->saveHTML( $Node );

反而。

于 2011-07-18T21:48:06.913 回答
2

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

另一种选择是获取$node您找到的,将其作为新 DOM 文档的顶级元素插入,然后调用saveHTML()该新文档。

于 2011-07-18T21:48:42.147 回答