Php 文档::getElementById(';内容';)不';不起作用,但元素在那里

Php 文档::getElementById(';内容';)不';不起作用,但元素在那里,php,dom,Php,Dom,我正在使用getElementById()方法进行DOM操作,但在使用getElementById()方法时遇到了一个问题。我正在寻找id为“content”的div,但返回NULL: $element = $document->getElementById('content'); if($element instanceof DOMElement) { // do something } 但是,以下代码确实返回了我要查找的元素: $elements = $document-&

我正在使用getElementById()方法进行DOM操作,但在使用getElementById()方法时遇到了一个问题。我正在寻找id为“content”的div,但返回NULL:

$element = $document->getElementById('content');

if($element instanceof DOMElement)
{
    // do something
}
但是,以下代码确实返回了我要查找的元素:

$elements = $document->getElementsByTagName('div'); 
foreach($elements as $element)
    {
        if($element->getAttribute('id') == 'content')
        {
                // do something
                break;
        }
    }
我可能忽略了一些简单的东西,但这两段代码看起来和我一样。(或者至少应该工作相同。)第二段代码现在可以运行了,但保持这种方式确实感觉不对。我想知道当第二个方法成功时,为什么第一段代码无法返回正确的元素。

我发现:

请注意,如果HTML不包含doctype声明, 然后getElementById将始终返回null

通过查找标记名和该标记名的ID,它将返回ID

我发现:

请注意,如果HTML不包含doctype声明, 然后getElementById将始终返回null

通过查找标记名和该标记名的ID,它将返回ID


在第二个示例中,您是否可以在
//do something
点验证它确实是DomeElement的
实例
-可能它被报告为其他内容?@KirenSiva$document可能是新的DomDocument;是的,循环中的$element是domeElement的一个实例。在第一个代码段中,$element等于NULL。变量$document是DOMDocument的一个实例。@Sherlock我发现:“请注意,如果HTML不包含doctype声明,那么getElementById将始终返回null。”,通过查找标记名和该标记名的ID,它将返回ID。哦,真的!请加上这个作为答案!您能否在第二个示例中的
//do something
点验证它确实是DomeElement的
实例
——可能它被报告为其他内容?@KirenSiva$document可能是新的DomDocument;是的,循环中的$element是domeElement的一个实例。在第一个代码段中,$element等于NULL。变量$document是DOMDocument的一个实例。@Sherlock我发现:“请注意,如果HTML不包含doctype声明,那么getElementById将始终返回null。”,通过查找标记名和该标记名的ID,它将返回ID。哦,真的!请加上这个作为答案!