我正在尝试通过其ID从外部页面(div标签包括一些内容)获取元素并将其打印到站点上的另一个页面。 我正在尝试使用以下代码,但是在包含元素中出现标签错误(图说明,图)。无论如何,是否可以通过另一个页面的 ID 仅包含一个div?
.PHP
$doc = new DOMDocument();
$doc->loadHTMLFile($_SERVER['DOCUMENT_ROOT'].'/assets/includes/example.html');
$example = $doc->getElementById('test');
echo $example->nodeValue;
?>
.HTML
<div id="test">
<figure>
<img src="img1.jpg" alt="img" />
<figcaption></figcaption>
</figure>
</div>
由于无法
进行DTD检查,HTML5上的DOMDocument输出错误即使没有错误。
为避免这种情况,只需按以下方式更改代码:
libxml_use_internal_errors( True );
$doc->loadHTMLFile( '$_SERVER['DOCUMENT_ROOT'].'/assets/includes/example.html' );
无论如何,即使显示了一些错误,您的代码也可以正确加载HTML文档,但您无法显示<div>
,因为您使用了错误的语法:更改echo $example->nodeValue
跟:
echo $doc->saveHTML( $example );
打印 DOM HTML 的正确语法是 DOMDocument->saveHTML()
,或者 - 如果你只想打印文档的一部分 - DOMDocument->saveHTML( DOMElement )
。
另请注意,DOMDocument 旨在不尝试保留原始文档中的格式,因此您可能不会获得以下内容:
<div id="test">
<figure>
<img src="img1.jpg" alt="img" />
<figcaption></figcaption>
</figure>
</div>
但是这个:
<div id="test">
<figure><img src="img1.jpg" alt="img"><figcaption></figcaption></figure>
</div>
你目前只echo
节点值,这将是文本。由于#test
中没有文本,因此不会输出任何内容。
您必须将其打印为 HTML:
echo $doc->saveHTML($example);