【问题标题】:DOMXpath query() doesn't provide expected contextual fetchingDOMXpath query() 不提供预期的上下文获取
【发布时间】:2018-03-09 22:46:01
【问题描述】:

非常感谢您的帮助。

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

恕我直言:对我来说,感觉就像 context 保留在 html 的根目录,而不是相应地更改为 foreach... 如果是这样,是否可以根据需要更改其行为?

附: Vuola!,已尝试更改 Xpath 查询 $a = $xpath->query('.') 并收到 DOMElement->tagName="html"
所以,除了my previous question on DOMXpath DOMNodeList 之外,似乎 DOMDocument 并没有给 DOMXpath 带来麻烦。这两者之间没有联系,没有可用的上下文使用......

Answer: 嗯,只是我瞎了白痴..错过了 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);
     }

 }                

【问题讨论】:

    标签: php domdocument domxpath


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了!将来,如果您在这里提出问题并自己找出答案,最好回来写一个答案。这样,您将帮助其他有相同问题的人。 :)
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2021-06-07
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多