使用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语句为空,我该怎么写呢?试试这个?就像一个代码?我能做到吗?或者我需要换一种方式吗?

第二个盒子的Xpath是:

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

第二个盒子的Xpath是:

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

您可以尝试每个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();
}
}

最新更新