【问题标题】:How to get the html inside a $node rather than just the $nodeValue [duplicate]如何在 $node 中获取 html 而不仅仅是 $nodeValue [重复]
【发布时间】: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,例如包括该图像而不仅仅是文本?

【问题讨论】:

    标签: php dom glob nodevalue


    【解决方案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()

      【讨论】:

        猜你喜欢
        • 2020-03-29
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        • 2021-05-04
        • 2021-09-15
        • 2016-07-28
        • 2013-09-15
        • 1970-01-01
        相关资源
        最近更新 更多