Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在所有情况下都使用XPath和PHP打印_Php_Xpath - Fatal编程技术网

在所有情况下都使用XPath和PHP打印

在所有情况下都使用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查询是否返回结果 如果有任何建议

我试图使用XPath和PHP从每个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、这正是我需要的,谢谢+谢谢你的回复。我还没有测试过这个,但它似乎可以工作。