0

我想提取微数据值。

我使用从命令行运行的 Yii 应用程序,使用 Putty。

以下代码不会产生任何输出;

在 $this->input->html 我存储了整个 html 文档源;

我认为某处有$content = new DOMXPath($dom);裂缝;不知道为什么

如果有人知道,请帮忙;

$dom = new DOMDocument();

$html = $this->input->html;

$html = <<<HTML
echo $html;
HTML;

        @$dom->loadHTML($html);

        echo $html;

        $content = new DOMXPath($dom);

        print_r($content);

        // find price
        try {
            echo '1'.$this->getMicrodataAttribute($content, 'http://data-vocabulary.org/Offer', 'price');
            $this->output->productPrice = $this->getMicrodataAttribute($content, 'http://data-vocabulary.org/Offer', 'price');
            //echo 'result output product price: '.$this->output->productPrice.PHP_EOL;
        } catch (Exception $e) {

        }
        // find title
        try {

            $this->output->productTitle = $this->getMicrodataAttribute($content, 'http://data-vocabulary.org/Product', 'name');
            if (!$this->output->productTitle)
                if (preg_match("#<title>(.+)<\/title>#iU", $this->input->html, $t)) {
                    $this->output->productTitle = trim($t[1]);
                }
        } catch (Exception $e) {

        }

这是应该提取微数据值的函数:

public function getMicrodataAttribute($content, $itemtype, $itemprop) {
    $tags = $content->query("//*[@itemtype=\"$itemtype\"]//*[@itemprop=\"$itemprop\"]");
    //print_r($tags);
    if ($tags) {
        foreach ($tags as $tag) {
            //die('dd');
            if (!$tag->getAttribute('content')) {
                return $tag->nodeValue;
            }
            return $tag->getAttribute('content');
        }
    }
    return null;
}
4

1 回答 1

1

我认为将html文本放入 a的代码DOMDocument有点复杂。也许那里隐藏着一个错误。试试这个:

$dom = new DOMDocument();
$dom->loadHTML( $this->input->html );
$content = new DOMXPath($dom);
print_r($content);

请注意,我@loadHTML方法中删除了 。有了这个,您可以查看它是否会引发任何错误。

于 2012-08-22T20:22:41.973 回答