如何在$ node中获取html而不仅仅是$ nodeValue

时间:2011-07-18 21:45:22

标签: php dom glob nodevalue

目前情况说明:

我有一个装满页面的文件夹(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 world

问题:

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

2 个答案:

答案 0 :(得分:35)

您必须在节点上进行未记录的调用。

$node->c14n()将为您提供$node中包含的HTML。

疯狂对吗?我失去了一些头发。

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

更新

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

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

相反。

答案 1 :(得分:2)

你想要的是什么相当于'innerHTML',这是PHP的dom不直接支持的。其中一个解决方法是PHP文档中的here

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