关于querypath的2个基本问题

时间:2012-05-21 06:42:40

标签: php html-parsing querypath

  1. 如何查找节点是否不存在? 我正在使用

    if($ item-> branch() - > siblings($ tagNames ['desc']) - > text())

  2. 有更好的方法吗?

    1. 有没有办法执行OR查询?如果标签A存在,则获取其text(),否则获取B的文本()?
    2. 我使用以下内容:

       $desc1 = (  $item->branch()->siblings($tagNames['desc'])->text()  ?
      $item->branch()->siblings($tagNames['desc'])   :
      $item->branch()->siblings($tagNames['descAlternative']) ) ;
      

      这看起来不是最有效的做事方式。

      由于

1 个答案:

答案 0 :(得分:4)

关于第一个:

当QueryPath找不到匹配项时,它的大小为0.所以你可以这样做:

if (count($item) > 0) {
  // do whatever with $item
}

所以对于第二个例子,你可以这样做:

if (count($item->branch()->siblings($tagNames['desc']))) {
    $item->branch()->siblings($tagNames['desc']);
    $item->branch()->siblings($tagNames['descAlternative']) ) ;
}

但还有另一种方法:你也可以同时传递两个选择器。

$item->branch()->siblings('desc, descAlternative')->text();

这将选择两者。但是,text()只会返回第一个匹配项的文本。所以它具有做OR的效果。