使用PHP通过ID获取和回显包含内容的元素

时间:2016-02-26 09:41:22

标签: php html

我正在尝试通过其ID从外部页面(包含一些内容的div标签)获取元素,并将其打印到网站上的另一个页面。我正在尝试使用下面的代码,但是我在包含元素中获得了标记错误(figcaption,图)。反正是否只包含一个div来自另一个页面的ID?

PHP     

>>> max(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> max(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>>

HTML

$doc = new DOMDocument();
$doc->loadHTMLFile($_SERVER['DOCUMENT_ROOT'].'/assets/includes/example.html');

$example = $doc->getElementById('test');

echo $example->nodeValue;

?>

2 个答案:

答案 0 :(得分:1)

您当前只有echo个节点值,它将是文本。由于#test中没有文字,因此不会输出任何内容。

您必须将其打印为HTML:

echo $doc->saveHTML($example);

答案 1 :(得分:1)

由于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>