PHP Xpath没有返回所有值

时间:2015-03-16 05:57:12

标签: php arrays xpath foreach

请关于Xpath的帮助......

以下脚本将使用Xpath

抓取URL的主体
<?php
//sentimen order
if (PHP_SAPI != 'cli') {
echo "<pre>";
}

require_once __DIR__ . '/../autoload.php';
$sentiment = new \PHPInsight\Sentiment();

require_once 'Xpath.php';


$startUrl = "http://news.sky.com/story/1445575/suspect-held-over-shooting-of-ferguson-police/";

$xpath = new XPATH($startUrl);

// We starts from the root element
$query = '/html/body/div[2]/div[3]/article/div/div[2]/div[2]/p[3]';


$strQuery = $xpath->query($query);
$strNode = $strQuery->item(0)->nodeValue;

$result = array($strNode);

foreach ($result as $string) {

// calculations:
$scores = $sentiment->score($string);
$class = $sentiment->categorise($string);

// output:
echo "Strings $string \n";
echo "Dominant: $class, scores: ";
print_r($scores);
echo "\n";
}

上面的脚本运行良好,除了数组循环... Xpath不会抓取所有内容,只能抓住主体的第一行..

我认为问题在于数组循环和foreach ......

任何人都可以帮助解决这个循环....

1 个答案:

答案 0 :(得分:0)

您只能获取一个段落。另外,你只将一个字符串放入数组中。

你可能正在寻找更多这方面的东西:

foreach ($xpath->query('
//header/h1
|//header/p
|//header//p[@class="last-updated__text"]
|//div[@class="story__content"]/p') as $p) {
    echo string_normalize($p->textContent), "\n\n";
}

function string_normalize($string)
{
    return preg_replace('~\s+~u', ' ', trim($string));
}

输出:

  

射击弗格森警察:嫌疑人被起诉

     检察官说,这名20岁的嫌犯声称他在与其他人的纠纷中开枪,并没有针对警方。

     

05:19,英国,2015年3月16日(星期一)

     

天空新闻美国队

     上周在密苏里州弗格森的两名警察开枪射击和伤人事件,一名嫌犯被指控。

     圣路易斯县检察官罗伯特麦卡洛克在新闻发布会上告诉被告是20岁的杰弗里威廉姆斯。

     他说,当地居民的嫌疑人在第一级学位中面临两项攻击罪。

     周六晚被捕的威廉姆斯也被控从车上开枪。

     

&#34;他承认自己参与了射击,并且#34;麦卡洛克先生告诉记者。

     

...