相同的XPath查询适用于Google文档,但不适用于PHP

相同的XPath查询适用于Google文档,但不适用于PHP,php,xpath,Php,Xpath,下面的XPath查询使用GoogleDocs的importXML可以很好地工作,但使用下面的PHP脚本无法工作。如果我将查询更改为更简单的查询,脚本将按预期工作。我已经尝试解决这个问题很长一段时间了,如果有任何建议,我将不胜感激 非常感谢 $file = fopen('info-urls.txt', "r"); $output = array(); $i=1; while(!feof($file)){ $line = fgets($file); echo $line . '

下面的XPath查询使用GoogleDocs的importXML可以很好地工作,但使用下面的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);
}
有效的XPath查询


//a

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

感谢您的回复。但是,更改不起作用,我收到以下错误:`注意:在第22行的C:\xampp\htdocs\www\wect\scrape\xpathgenius.php中尝试获取非对象的属性`yep这是预期的行为<代码>求值将返回标量值。尝试
var\u转储($elements)
(我希望您的查询将返回一个字符串,而不是一个节点列表)我明白了,虽然我不明白为什么文件的输出结果保持不变,但是所有
N/a,
,如果
var\u dump
从xpath查询中打印出字符串,它不应该工作吗
var_dump()之后。
你现在看到了什么?@AnchovyLegend没问题!:)我也花了好几个小时,就像你。。我认为这个函数没有很好的文档说明。请将您的示例简化为一个能够产生错误的HTML文档(片段)(这样示例就可以重现,这通常是需要的)。接下来,您还应该添加有效的xpath查询。
N/A,
N/A,
N/A,
N/A,
N/A,