формат 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 написал(а):
что-то не работает
Спустя 2 часа, 35 минут, 58 секунд (23.01.2012 - 20:56) vuler написал(а):
В принципе понял в чем была проблема просто
$news = $title->item(3)->textContent; получало строку без тегов, т.ч. фильтр не сработал. Написал код не используя xml, просто как текст, но тут возникла одна проблемка.
Как я не пытался удалить тэги с текста ничего не выходит, strip_tags не хочет фурычить. можете объяснить почему?
$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 теги, а если ты запустишь свой скрипт и посмотришь исходный код, то увидишь там символы < > это символы < > заменяются на свои 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]?
А можно еще вопросик. Почему
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] сохраняется то совпадение, которое попало в (.*)
Попробуй заменить на
И если совпадение будет найдено, то можно будет обращаться к новостям вот так
$match[1]
В $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>';
И посмотри, одинаковые или нет? :)