2013-07-04 32 views
0

使用Google文档的importXML,下面的XPath查询工作得很好,但无法使用以下PHP脚本工作。如果我将查询更改为更简单的查询,则该脚本按预期工作。我一直试图解决这个问题很长一段时间,并希望有任何建议。相同的XPath查询使用Google文档,但不使用PHP

非常感谢提前!

$file = fopen('info-urls.txt', "r"); 

$output = array(); 
$i=1; 

while(!feof($file)){ 
    $line = fgets($file); 

    echo $line . '<br/>'; 
    $doc = new DOMDocument(); 
    $doc->loadHTMLFile(trim($line)); 

    $xpath = new DOMXpath($doc); 

    $elements = $xpath->query("substring((//*[self::div or self::p or self::li or self::td or self::tr or self::table or self::h4 or self::h4 or self::h3 or self::h2 or self::h1][contains(text(),'boat') or contains(text(),'bike') or contains(text(),'car')]/text())[1], 0, 499)"); 

    if ($elements->length == 0) { 
     $output[] = 'N/A'; 
    }else{ 
     foreach ($elements as $element) { 
      $nodes = $element->childNodes; 
      foreach ($nodes as $node) { 
       if(strcmp($node->nodeValue, "")!=0){ 
        $output[] = trim($node->nodeValue); 
       } 
      } 
     } 
    } 
} 
array2csv($output); 
print_r($output); 

function array2csv(array &$array){ 
    $file = 'descriptions.txt'; 

    $csvFormat = ""; 

    for($i=0; $i < sizeof($array); $i++){ 
     $csvFormat .= $array[$i] . ",\n"; 
    } 
    file_put_contents($file, $csvFormat); 
} 

脚本description.txt输出

N/A, 
N/A, 
N/A, 
N/A, 
N/A, 

XPath查询的作品

//a

+1

请将您的示例缩减为能够产生错误的* single * HTML文档(片段)(以便可以重现该示例,这通常在SO上是必需的)。接下来的事情是你也应该添加可用的xpath查询。 – hakre

回答

1

使用$xpath->evaluate()而不是$xpath->query()。这是因为你的查询将返回一个标量字符串而不是一个DOMNodeList,它将返回XPath函数substring()的结果,实际上是一个字符串。

+0

感谢您的回复。但是这个改变没有起作用,我得到了下面的错误:' 注意:试图在第22行获取C:\ xampp \ htdocs \ www \ wect \ scrape \ xpathgenius.php中的非对象的属性。' – AnchovyLegend

+0

这就是预期的行为。 'evaluate'将返回一个标量值。尝试'var_dump($ elements);'(我希望你的查询将返回一个字符串,而不是一个节点列表) – hek2mgl

+0

虽然我不明白为什么输出到文件最终保持不变,所有'N/A ,',如果'var_dump'从xpath查询输出字符串,它不应该工作吗? – AnchovyLegend