[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с экспорт Rss новостей(XML) на страницу
vuler
В общем есть новости к примеру http://press.rzd.ru/layer/rss?vp=9&id=107
формат XML

Код моего документа:
<?php
header("content-Type:text/html; charset=utf-8");
$dom = new DomDocument();
$dom->load("http://press.rzd.ru/layer/rss?vp=9&id=107");
$root = $dom->documentElement;

$title=$root->getElementsByTagName("item");
echo $title->item(3)->textContent; //ну например 4-я новость.
?>

Проблема в том, что тэг item имеет следующий вид.
<item><item>
<title><title>
<link><link>
<guid><guid>
<pubDate><pubDate>
НОВОСТЬ
</item>

Сама НОВОСТЬ не заключена в отдельный тэг, она идет в куче со всеми остальными тэгами. И в результате выводится новость со всеми <item><item>
<title><title><link><link><guid><guid> и т.д. Может подскажите алгоритм как можно выцепить из файла только голую новость и все.
Заранее благодарен



Спустя 33 минуты, 15 секунд (23.01.2012 - 17:12) Winston написал(а):
$news = $title->item(3)->textContent;
preg_match('#</pubDate>(.*)</item>#isuU', $news, $match);
echo $match[1];




Спустя 1 минута, 43 секунды Winston написал(а):
Или еще так
echo strip_tags($news)

Спустя 1 час, 7 минут, 27 секунд (23.01.2012 - 18:20) vuler написал(а):
что-то не работает sad.gif

Спустя 2 часа, 35 минут, 58 секунд (23.01.2012 - 20:56) vuler написал(а):
В принципе понял в чем была проблема просто
$news = $title->item(3)->textContent; получало строку без тегов, т.ч. фильтр не сработал. Написал код не используя xml, просто как текст, но тут возникла одна проблемка.

header("Content-type:text/html; charset=utf-8");
$str = file_get_contents("http://press.rzd.ru/layer/rss?vp=9&id=107");
preg_match_all('#</pubDate>(.*)</item>#isuU', $str, $match);
$test = (string)$match[1][2];
echo strip_tags("$test");

Как я не пытался удалить тэги с текста ничего не выходит, strip_tags не хочет фурычить. можете объяснить почему?



Спустя 26 минут, 25 секунд (23.01.2012 - 21:22) Winston написал(а):
Цитата (vuler @ 23.01.2012 - 19:56)
echo strip_tags("$test");

Заменить на
echo strip_tags(html_entity_decode($test))

Цитата (vuler @ 23.01.2012 - 19:56)
strip_tags не хочет фурычить. можете объяснить почему

strip_tags удаляет только html теги, а если ты запустишь свой скрипт и посмотришь исходный код, то увидишь там символы &lt; &gt; это символы < > заменяются на свои html-сущности, потому мы их декодируем опять в html теги с помощью html_entity_decode и потом с помощью strip_tags вырезаем их.

Спустя 1 день, 17 часов, 57 минут, 28 секунд (25.01.2012 - 15:20) vuler написал(а):
Winston - спс за подсказку.
А можно еще вопросик. Почему
preg_match_all('#</pubDate>(.*)</item>#isuU', $str, $match);

Возвращает в $match - 2 массива(вроде одинаковых), а не один.
т.е. к новостям обращаться надо $match[1][2], а не просто к примеру $match[2]?

Спустя 9 минут, 55 секунд (25.01.2012 - 15:30) Winston написал(а):
vuler
В $match[0] сохраняется все совпадение, вместе с </pubDate> и </item>
А в $match[1] сохраняется то совпадение, которое попало в (.*)

Попробуй заменить на

preg_match('#</pubDate>(.*)</item>#isuU', $str, $match);

И если совпадение будет найдено, то можно будет обращаться к новостям вот так
$match[1]

Спустя 3 минуты, 26 секунд (25.01.2012 - 15:33) vuler написал(а):
Причем в первом и втором подмассивах колличество букв в строке разное. например в $match[0][2] оно 405, а в $match[1][2] оно 388. Хотя при выводе через var_dump обе строчки вроде одинаковые.

Спустя 2 минуты, 49 секунд (25.01.2012 - 15:36) Winston написал(а):
Напиши
echo '<pre>'.print_r($match, 1).'</pre>';

И посмотри, одинаковые или нет? :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.