使用DOMDocument,我试图读取HTML文件的一部分,并使用下面的代码将其显示在不同的HTML页面上。我试图访问的DIV部分有几个<p>
标签。问题是当DOM解析文件时,它只获取<p>
标记之间的文本内容-条带标记-并且段落格式丢失。它合并文本并将它们全部显示为一个段落。如何保持HTML格式,使段落显示为源文件中的样子?
HTML代码
<div class="text_container">
<h3>Title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing eli.
Lorem ipsum dolor sit amet, consectetur adipiscing eli.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing eli.
Lorem ipsum dolor sit amet, consectetur adipiscing eli.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing eli.
Lorem ipsum dolor sit amet, consectetur adipiscing eli.</p>
DOMDocumnet代码
<?php
$page = file_get_contents('word.php');
$doc = new DOMDocument();
$doc -> loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
if ($div->getAttribute('class') === 'text_container') {
echo '<p>',$div->nodeValue,'</p>';
}
?>
您可以定义一个自定义函数DOMinnerHTML()
(在这里描述)来检索元素的内部HTML,而不是其文本内容。它的工作原理是临时创建一个新文档:
<?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;
}
?>
使用例子:
$doc = new DOMDocument();
$doc -> loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
if ($div->getAttribute('class') === 'text_container') {
$innerHtml = DOMinnerHTML($div);
echo '<div>' . $innerHtml . '</div>';
}
}