Php 关于querypath的2个基本问题

Php 关于querypath的2个基本问题,php,html-parsing,querypath,Php,Html Parsing,Querypath,如何查找节点是否不存在? 我正在使用 如果($item->branch()->兄弟($tagNames['desc'])->text()) 有更好的办法吗 有没有执行OR查询的方法?如果标记A存在,获取其文本(),否则获取B的文本() 我正在使用以下工具: $desc1 = ( $item->branch()->siblings($tagNames['desc'])->text() ? $item->branch()->siblings($tagNames['

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

如果($item->branch()->兄弟($tagNames['desc'])->text())

有更好的办法吗

  • 有没有执行OR查询的方法?如果标记A存在,获取其文本(),否则获取B的文本()
  • 我正在使用以下工具:

     $desc1 = (  $item->branch()->siblings($tagNames['desc'])->text()  ?
    $item->branch()->siblings($tagNames['desc'])   :
    $item->branch()->siblings($tagNames['descAlternative']) ) ;
    
    这看起来不是最有效的做事方式

    关于第一个问题,谢谢

    当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。

    当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的效果。

    我越来越喜欢querypath!我越来越喜欢querypath了!