1

我正在查询 YEAR、RATING 列的 URL,并且我想将这两个列插入数据库。例如年份评级 1992 9.2 2000 9 1999 8。. . . . . . .

所以,我正在编写如下脚本:

$url = 'BLA BLA ';
$data = file_get_contents($url);
$dom = new Zend_Dom_Query($data);
$year = $dom->query('.secondaryInfo');
$rating = $dom->query('.ratingColumn');

如何将它们都插入数据库中???

for ( .... What do I have to write here?)

$parse = new Application_Model_Parse();
$parse->createImdb(array(
'rating' => What do I have to write here?
'year' => What do I have to write here?
));

任何帮助都会很有用。

谢谢

4

1 回答 1

1

http://framework.zend.com/manual/1.12/en/zend.dom.query.html所述

一旦你有了一个文件,你可以使用query()orqueryXpath()方法;每个方法都将返回一个Zend_Dom_Query_Result具有任何匹配节点的对象。

并进一步

如前所述,Zend_Dom_Query_Result实现IteratorCountable,因此可以在foreach()循环中使用,也可以与count()函数一起使用。

在这种情况下,各种Iterator 方法将返回PHP 的原生 DOMElement,这意味着您可以通过它的nodeValue属性访问 Element 的文本内容。

假设 Result 对象中只有一项,请尝试

$parse->createImdb(
    array(
        'rating' => $rating->current()->nodeValue
        'year' => $year->current()->nodeValue
    )
);

如果您对使用迭代器感到不舒服,可以使用:

到,好吧,将迭代器复制到一个数组中,然后使用它,例如

$rating = iterator_to_array($rating);
$year = iterator_to_array($year);
$parse->createImdb(
    array(
        'rating' => $rating[0]->nodeValue
        'year' => $year[0]->nodeValue
    )
);

如果有多个结果,则将它们与MultipleIterator一起迭代

$ratingsAndYears = new MultipleIterator();
$ratingsAndYears->attachIterator($rating);
$ratingsAndYears->attachIterator($year);

foreach ($ratingsAndYears as $ratingAndYear) {
    $parse = new Application_Model_Parse();
    $parse->createImdb(
        array(
            'rating' => $ratingAndYear[0]->nodeValue
            'year' => $ratingAndYear[1]->nodeValue
        )
    );

在旁注中,Zend_Dom_Query它只是 PHP 的原生 DOM 扩展的一个薄包装器,如果您知道XPath,那么您真的不需要 W3 Selector 查询它提供的查询,并且可以单独使用 DOM 完成所有操作。

于 2013-11-05T11:09:45.960 回答