Добавление двух Xpath с объединением в функции PHP? - PullRequest
1 голос
/ 26 сентября 2011

С кодом ниже я показываю названия многих RSS.Эти RSS должны быть в формате rss->channel->item, где в item вы найдете title, description, pubDate и т. Д.

Мой вопрос заключается в том, как изменить это, так что также будет принимать RSS в формате feed->entry, где в entry вы выводите title, content, published?

$feeds = array('', '');


// Get all feed entries
$posts = array();
foreach ($feeds as $feed) {

    $xml = simplexml_load_file($feed);
    $posts = array_merge($posts, $xml->xpath('/rss/channel//item'));

}


// Sort feed entries by pubDate (ascending)
usort($posts, 'mysort');


function mysort($x, $y) {
    return strtotime($y->pubDate) - strtotime($x->pubDate);
}

foreach ($posts as $post) {
echo $post->description; // if the rss is in the format of rss->channel->item
echo $post->content; // if the rss is in the format of feed->entry->content then
 }

Ответы [ 4 ]

1 голос
/ 26 сентября 2011

Используйте оператор XPath union (|) :

/rss/channel/item | /rss/feed/entry

Для сортировки используйте :

published | pubDate

Объяснение : Объединение взаимоисключающих множеств приводит только к одному из них.

0 голосов
/ 02 октября 2011

Это то, что я хотел

return strtotime(($y->pubDate)?$y->pubDate:$y->published) - 
                  strtotime(($x->pubDate)?$x->pubDate:$x->published);
0 голосов
/ 26 сентября 2011

Вы можете запустить 2 xpath. Если первое не дает результатов, попробуйте второе.

Это может быть самым простым и самым прагматичным.

0 голосов
/ 26 сентября 2011

Если entry находится непосредственно под feed, измените запрос XPath с /rss/channel//item на /feed/entry. (Если это не так, вам понадобится /feed//entry; обратите внимание на двойной обратный слеш.)

Вам также придется изменить функцию сортировки; Я предполагаю, что вы захотите отсортировать по published:

return strtotime($y->published) - strtotime($x->published);

Наконец, измените цикл foreach, чтобы выплевать интересующие вас значения:

foreach ($entries as $entry) {
    echo $entry->title;
    echo $entry->content;
    echo $entry->published;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...