我试图从一个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');
答案 0 :(得分:0)
手册中的这条评论可能会对您有所帮助:
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);
}
?>
更新:
btw:h*
标记在p
标记内无效。例如,在firebug中,您会看到firefox会自动关闭h
标记之前的p标记,然后再将其打开。
答案 1 :(得分:0)
获取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>