DOMDocument :: getElementsByTagName和DOMXPath :: query之间的区别?

时间:2013-10-12 16:21:14

标签: php dom

DOMDocument :: getElementsByTagName()和DOMXPath :: query()都返回一个DOMNodeList。然而,他们似乎有不同的工作方式:

// Works as expected, removes all scripts
$r=$doc->getElementsByTagName('script');
while($r->length){
    $el=$r->item(0);
    $el->parentNode->removeChild($el);
}

// Error
$r=$xpath->query('//comment()');
while($r->length){
    $el=$r->item(0);
    $el->parentNode->removeChild($el);
}

// Works as expected, removes all comments
$r=$xpath->query('//comment()');
foreach($r as $el){
    $el->parentNode->removeChild($el);

}

为什么他们不一样? getElementsByTagName()返回的DOMNodeList在删除第一个节点时自动将索引向下移动,而query()返回的DOMNodeList只是使第一个索引为空。还有其他差异吗?

0 个答案:

没有答案