DOMXpath query() 不提供预期的上下文提取

DOMXpath query() doesn't provide expected contextual fetching

非常感谢帮助。

无法使 DOMXpath 拉取必要的 DOM上下文中的节点。
不知何故在每个 for 迭代 $a 是一个 DOMNodeList (length=31) 似乎是 all <a> 来自整个 DOM 而不是 的预期 children 的 只有一个 $childNode 来自所有(并且长度应该是 4 ).

恕我直言:对我来说,感觉 context 仍然是 html 的根,而不是相应地更改为 foreach... 如果是这样,是可以根据需要改变它的行为吗?

P.S。 Vuola!,已尝试更改 Xpath 查询 $a = $xpath->query('.') 并收到 DOMElement->tagName="html"
因此,除了 之外,DOMDocument 似乎对 DOMXpath 毫不在意。这两者之间没有联系,没有可用的上下文用法...

回答:嗯,只是我是个瞎子白痴..错过了 DOMXpath::query()

的第二个参数
$dom = new DOMDocument();
$dom -> loadHTML('HTML data');
$xpath = new DOMXpath($dom);

$myDivs = $xpath -> query('//div[@price]');

for($i=0; $i <= $myDivs->length-1; $i++) {

  $childNodes = $myDivs->item($i)->childNodes;

  foreach($childNodes as $childNode){
    $a=$xpath->query('.//a[@data-image-src]');

     if($a){
       usleep(1);
     }

 }                

您需要提供 上下文节点 作为 DOMXPath::query() 方法的第二个参数。

在您的特定情况下,这将是:

$a = $xpath->query('.//a[@data-image-src]', $childNode);