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

时间:2017-09-28 08:51:28

标签: php domdocument domxpath

非常感谢。

无法使DOMX路径在上下文中拉出必要的DOMNode 不知何故,每个for迭代$a是一个DOMNodeList(长度= 31)似乎是来自整个DOM的所有 <a> 而不是所有预期的孩子只有一个 $childNode(长度应为4)。

恕我直言:对我而言,感觉 context 仍然是html的根源,而不是相应地更改为foreach ......如果是这样,是否有可能改变其行为作为reqiured?

P.S。 Vuola!,尝试更改过Xpath查询$a = $xpath->query('.')并收到DOMElement->tagName="html"
所以,除了my previous question on DOMXpath DOMNodeList之外,似乎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);
     }

 }                

1 个答案:

答案 0 :(得分:0)

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

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

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