【问题标题】:Access inner html of a tag from a DOM document从 DOM 文档访问标签的内部 html
【发布时间】:2014-08-22 16:40:58
【问题描述】:

我正在尝试从一个 html 文件中获取一些内容并使用 php 将该内容加载到另一个 html 文件中。我已将第一个 html 文件加载为 DOMdocument。现在我想获取加载的 html 文件的某个标签内的内容。我已经在互联网上搜索了解决方案,但我只能找到获取标签内内容值的方法。我想获取给定标签内的所有内容。即包括内部html标签。我该怎么做?

我有一个这样的html文件:

<html>
<head>
</head>
<body>
</body>
<p>
<h1> hi </h1>
</p>
</html>

使用这个 html 文件创建一个 domdocument。现在我想做的是获取内容:

    <p>
    <h1> hi </h1>
    </p>

作为字符串。

简而言之,我需要一个类似的功能:

 $doc->getElementsByTagName('p').item(0).innerHTML;

这里的 $doc 是一个 DomDocument。

$doc = new DomDocument;
$doc->Load('test.html');

【问题讨论】:

标签: html parsing domdocument innerhtml


【解决方案1】:

手册中的这条评论可能会对您有所帮助:

http://php.net/manual/en/book.dom.php#89718

<?php
function DOMinnerHTML($element)
{
    $innerHTML = "";
    $children = $element->childNodes;
    foreach ($children as $child)
    {
        $tmp_dom = new DOMDocument();
        $tmp_dom->appendChild($tmp_dom->importNode($child, true));
        $innerHTML.=trim($tmp_dom->saveHTML());
    }
    return $innerHTML;
}
?>

Example:

<?php
$dom= new DOMDocument();
$dom->load($html_string);
$dom->preserveWhiteSpace = false;

$domTable = $dom->getElementsByTagName("table");

foreach ($domTable as $tables)
{
    echo DOMinnerHTML($tables);
}
?>

更新:

顺便说一句:h* 标记在 p 标记内无效。例如,在 firebug 中,您会看到 firefox 自动关闭 h 标记之前的 p 标记并在其之后再次打开它。

【讨论】:

    【解决方案2】:

    获取 DOM 节点的内部 HTML 最直接的方法(如果您不介意修改原始文档)是创建一个新的 DOMDocumentFragment 并将子节点移动到其中:

    <?php
    
    $html = '<body><p><span> hi </span></p></body>';
    
    $doc = new DOMDocument();
    $doc->loadHTML($html);
    
    $p = $doc->getElementsByTagName('p')->item(0);
    
    $fragment = $doc->createDocumentFragment();
    
    while ($p->firstChild) {
      $fragment->appendChild($p->firstChild);
    }
    
    print $doc->saveHTML($fragment); // <span> hi </span>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-08
      • 2010-11-08
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多