DOMElement 似乎没有从 DOMNodeList 中删除

DOMElement does not seem to be removed from DOMNodeList

请帮忙!
需要 删除 来自 DOMNodeList $myDivs 的第一个元素,但实际删除不会发生 - 元素仍然存在。

$dom = new DOMDocument();
$dom->loadHTML($file);
$xpath = new DOMXPath($dom);
$myDivs = $xpath->query('//div[@data-name|data-price]');
usleep(1);
//Must REVERSE iterate DOMNodeList.
for ($i = $myDivs->length - 1; $i >= 0; $i--) {
  //Deleting 1st element of (DOMNodeList) $myDivs, containing advertisement product
  if ($i == 0) {
  //Removing div element (DOMNode) from DOM? DOMNodeList? Nothing changes
    $result = $myDivs->item($i)->parentNode->removeChild($myDivs->item($i));
  }
  //Adding formatted string of attributes of valid DOMElements (div)
  $outputArr[] = printf('%1$s - %2$s, %3$s.<br>',
                        $myDivs->item($i)->getAttribute('data-name'),
                        $myDivs->item($i)->getAttribute('data-price'),
                        $myDivs->item($i)->getAttribute('data-currency'))
                    ?? null;
}

for(){} 反向遍历 $myDivs,由 XPath 获取并在最后一次迭代($i=0,元素 #0)DOM 应清除所有元素(DOM 和 DOMNodeList),从 php.net 看来:

Keep in mind that DOMNodelists are "live" - changes to the document or node that the DOMNodelist was derived from will be reflected in the DOMNodelist.

You can modify, and even delete, nodes from a DOMNodeList if you iterate backwards

但这并没有发生!

没有错误发生,$result 等于确切的元素 #0(意味着 removeChild() 已正确完成它的工作)

调试时,我在第 usleep(1); 行得到 $myDivs->length=31,在第 $outputArr[] =... 行,我仍然有相同长度的 $myDivs
所以,元素 #0 仍然附加到 $ouputArr,而不应该...

看不到我错过了什么...

P.S。当然,这种情况是不是总可以直接用continue来迭代跳转,但是删除呢?

您没有引用官方文档,而是用户提供的评论。从 XPath 查询返回的 DOMNodeLists 不是 "live"。 removeChild 仅从原始文档中删除节点,而不是从 DOMNodeList 中删除节点。