PHP Simple HTML DOM Parser — элемент ссылки в RSS

Я только начал использовать PHP Simple HTML DOM Parser (http://simplehtmldom.sourceforge.net/), и у меня есть несколько проблемы с разбором XML.

Я могу отлично разобрать все ссылки из HTML-документов, но парсинг ссылок из RSS-каналов (формат XML) не работает. Например, я хочу проанализировать все ссылки с http://www.bing.com/search?q=ipod&count=50&first=0&format=rss поэтому я использую этот код:

$content = file_get_html('http://www.bing.com/search?q=ipod&count=50&first=0&format=rss');

foreach($content->find('item') as $entry)
{
$item['title']     = $entry->find('title', 0)->plaintext;
$item['description']    = $entry->find('description', 0)->plaintext;
$item['link'] = $entry->find('link', 0)->plaintext;
$parsed_results_array[] = $item;
}

print_r($parsed_results_array);

Скрипт анализирует заголовок и описание, но элемент ссылки пуст. Любые идеи? Я предполагаю, что «ссылка» — это зарезервированное слово или что-то в этом роде, так как мне заставить парсер работать?


person Mindaugas Li    schedule 22.07.2014    source источник
comment
У меня есть проект в SimpleDomParser и... Это отстой. Ну, может быть, этого не было, когда он вышел, но вам будет лучше с FluentDOM: ) И так как вы только начали, я не думаю, что это будет так сложно изменить?   -  person MoshMage    schedule 22.07.2014
comment
PHP Simple HTML DOM Parser не предназначен для разбора XML! Вместо этого используйте SimpleXML: php.net/manual/en/book.simplexml.php   -  person AndiPower    schedule 22.07.2014


Ответы (3)


Я предлагаю вам использовать правильный инструмент для этой работы. Используйте SimpleXML: Плюс встроенный :)

$xml = simplexml_load_file('http://www.bing.com/search?q=ipod&count=50&first=0&format=rss');
$parsed_results_array = array();
foreach($xml as $entry) {
    foreach($entry->item as $item) {
        // $parsed_results_array[] = json_decode(json_encode($item), true);
        $items['title'] = (string) $item->title;
        $items['description'] = (string) $item->description;
        $items['link'] = (string) $item->link;
        $parsed_results_array[] = $items;
    }
}

echo '<pre>';
print_r($parsed_results_array);

Должно получиться что-то вроде:

Array
(
    [0] => Array
        (
            [title] => Apple - iPod
            [description] => Learn about iPod, Apple TV, and more. Download iTunes for free and purchase iTunes Gift Cards. Check out the most popular TV shows, movies, and music.
            [link] => http://www.apple.com/ipod/
        )

    [1] => Array
        (
            [title] => iPod - Wikipedia, the free encyclopedia
            [description] => The iPod is a line of portable media players designed and marketed by Apple Inc. The first line was released on October 23, 2001, about 8½ months after ...
            [link] => http://en.wikipedia.org/wiki/IPod
        )
person Kevin    schedule 22.07.2014

Если вы привыкли использовать PHP Simple HTML DOM, вы можете продолжать использовать его! Слишком много подходов могут привести к путанице, а simplehtmldom и без того прост и эффективен.

Убедитесь, что вы начинаете так:

require_once('lib/simple_html_dom.php');

$content =  file_get_contents('http://www.bing.com/search?q=ipod&count=50&first=0&format=rss');
$xml = new simple_html_dom();
$xml->load($content);

Тогда вы можете пойти со своими запросами!

person tong    schedule 25.02.2015

редактировать класс simple_html_doom

protected $self_closing_tags

удалить ключ "ссылка"

ДО:

protected $self_closing_tags = array('img'=>1, 'br'=>1,'link'=>1, 'input'=>1, 'meta'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);

ПОСЛЕ:

protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);
person Vladimr Karnauhov    schedule 24.06.2015