在所有情况下都使用XPath和PHP打印
我试图使用XPath和PHP从每个URL提取一些信息。重要的是,即使XPath查询没有返回任何内容,也要为每个URL打印一些内容。因此,我尝试将脚本设置为打印出XPath不返回结果的在所有情况下都使用XPath和PHP打印,php,xpath,Php,Xpath,我试图使用XPath和PHP从每个URL提取一些信息。重要的是,即使XPath查询没有返回任何内容,也要为每个URL打印一些内容。因此,我尝试将脚本设置为打印出XPath不返回结果的N/a。但是,此else子句从不输入,也从不打印N/A scrape.txt包含50个URL。返回47/50 URL的结果。我不关心XPath查询,更关心脚本本身为每个尝试的URL返回一些值 有人能帮我确定为什么会发生这种情况,并帮助我想出一种方法来保证打印某些字符串,而不管XPath查询是否返回结果 如果有任何建议
N/a
。但是,此else
子句从不输入,也从不打印N/A
scrape.txt
包含50个URL。返回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);
DOMXpath->query
返回一个元素,无论是否有结果。测试其长度值:
if ($elements->length == 0) {
// No results found
} else {
foreach ($elements as $element) {
// for each result
}
}
您可以尝试以下方法,尽管我不确定自己是否完全理解问题的本质:
$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);
+1、这正是我需要的,谢谢+谢谢你的回复。我还没有测试过这个,但它似乎可以工作。