我正在尝试使用XPath和PHP从每个URL中提取一些信息。即使XPath查询没有返回任何内容,为每个URL打印一些内容也很重要。因此,我尝试设置我的脚本以打印出N/A
,其中XPath没有返回任何结果。但是,永远不会输入此else
子句,并且永远不会打印N/A
。
scrape.txt
包含50个网址。返回47/50 URL的结果。我不关心我的XPath查询,但更多关于脚本本身为每个尝试的URL返回一些值。
有人可以帮我确定发生这种情况的原因并帮助我找到一种方法来保证打印字符串是否打印出来,无论是否有从XPath查询返回的结果?
我很感激任何建议。非常感谢提前!
$file = fopen('scrape.txt', "r");
$output = array();
while(!feof($file)){
$line = fgets($file);
$doc = new DOMDocument();
$doc->loadHTMLFile($line);
$XPath = new DOMXPath($doc);
$elements = $XPath->query("//ul/li[1]/a[@class='geMain']");
if (!is_null($elements)) {
foreach ($elements as $element) {
$nodes = $element->childNodes;
foreach ($nodes as $node) {
if(strcmp($node->nodeValue, "")!=0){
$output[] = trim($node->nodeValue);
}
}
}
}else{
$output[] = "N/A";
}
}
array2csv($output);
答案 0 :(得分:1)
DOMXpath->query
会返回DOMNodeList元素,无论是否有结果。测试其length
值:
if ($elements->length == 0) {
// No results found
} else {
foreach ($elements as $element) {
// for each result
}
}
答案 1 :(得分:1)
您可以尝试以下方法,但我不确定我是否完全理解问题的本质是什么:
$file = fopen('scrape.txt', "r");
$output = array();
while(!feof($file)){
$line = fgets($file);
$doc = new DOMDocument();
$doc->loadHTMLFile($line);
$XPath = new DOMXPath($doc);
$elements = $XPath->query("//ul/li[1]/a[@class='geMain']");
$haveOutput = false;
if (!is_null($elements)) {
foreach ($elements as $element) {
$nodes = $element->childNodes;
foreach ($nodes as $node) {
if(strcmp($node->nodeValue, "")!=0){
$output[] = trim($node->nodeValue);
$haveOutput = true;
}
}
}
}
if (!$haveOutput) {
$output[] = "N/A";
}
}
array2csv($output);