Использование оператора if для захвата данных с помощью Xpath

У меня есть три URL-адреса, и эти URL-адреса имеют нужные мне данные. Но все данные в другом теге html. Вот почему я не могу дать один и тот же Xpath для всех. Мне нужно попробовать «если не найти этот Xpath, тогда попробуйте это». как путь. Но я немного смущен тому, как это сделать?

Например, это ссылки $linkBox :

array(3) {
  [0]=>
  string(34) "https://lions-mansion.jp/MF161026/"
  [1]=>
  string(34) "https://lions-mansion.jp/MF171045/"
  [2]=>
  string(34) "https://lions-mansion.jp/MF171010/"
  }

И я иду по этим ссылкам один за другим. И для первого. Я даю Xpath:

$get = [];
    foreach ($linkBox as $box){
        $content = pageContent($box);
            $Pars = new DOMXPath($content);
            $Route = $Pars->query("//ul[@id='snav']/li/a");
            foreach ($Route as $Rot){
                $get = $Rot->getAttribute('href');
            }

    }

Но этот Xpath не подходит для второго или третьего. Итак, с утверждением if, как я могу написать, если это null, попробуйте это? как код? Могу ли я это сделать? или мне нужно использовать другой способ?

Второй путь Xpath:

 $Route = $Pars->query("//nav[@id='siteActionNav']ul/li/a");

Второй путь Xpath:

 $Route = $Pars->query("//ul[@id='subNavi']/li[2]/a");

Всего 1 ответ


Что вы можете сделать, это попробовать каждое выражение XPath и посмотреть, вернет ли он какие-либо элементы.

Например, вот функция, которая поочередно проверяет каждое выражение, возвращая DOMNodeList если он найдет какие-либо совпадения, иначе исключая исключение ...

 function findLinks(DOMXPath $xp) { $queries = [ '//ul[@id="snav"]/li/a', '//nav[@id="siteActionNav"]ul/li/a', '//ul[@id="subNavi"]/li[2]/a' ]; foreach ($queries as $query) { $links = $xp->query($query); if ($links->length > 0) { return $links; // exits the function and returns the list } } throw new RuntimeException('No links found'); } 

вы можете использовать это как

 foreach ($linkBox as $box){ $content = pageContent($box); try { $links = findLinks(new DOMXPath($content)); foreach ($links as $link){ $get[] = $link->getAttribute('href'); // note: changed to a push } } catch (Exception $e) { echo "Problem with $box: " . $e->getMessage(); } } 

Есть идеи?

10000