Консультация № 141021
29.07.2008, 23:03
0.00 руб.
0 1 1
Добрый день уважаемые эксперты!

Помогите пожалуйста разобраться.

Имеется строка $content содержащая следующие данные:

<content>
<news id="1">
<id>1</id>
<title>Новость 1</title>
<date>12.11.00</date>
<description>
<description_small>Краткое описание новости</description_small>
<description_full>Полное описание</description>
</description>
<image_list>
<image>
<src>ссылка 1</src>
<date>дата 1</date>
</image>
...
<image>
<src>ссылка N</src>
<date>дата N</date>
</image>
</image_list>
</news>
...
<news id="1">
<id>N</id>
<title>Новость N</title>
<date>13.11.00</date>
<description>
<description_small>Краткое описание новости</description_small>
<description_full>Полное описание</description>
</description>
<image_list>
<image>
<src>ссылка 1</src>
<date>дата 1</date>
</image>
...
<image>
<src>ссылка N</src>
<date>дата N</date>
</image>
</image_list>
</news>
</content>

Для извлечения данных я использую следующий код:

<?
$content = "...";
$i=0;
$select = '|<id>(.*?)</id>|i';
$id = array();
preg_match_all($select,$content,$id);
$select = '|<title>(.*?)</title>|i';
$title = array();
preg_match_all($select,$content,$title);
$select = '|<image_list>(.*?)</image_list>|i';
$image_list = array();
preg_match_all($select,$content,$image_list);

while (@$id[0][$i]!="")
{
echo $id[0][$i]."
".$title[0][$i]."
".$image_list[0][$i]."
<hr>
";
$i=++$i;
}
?>

После выполнения данного кода выводятся только ID и TITLE, а содержимое IMAGE_LIST нет. Подскажите, может кто-нибудь знает почему так происходит и как мне вывести эти данные в том виде в каком они есть, т.е. вместе с тегами.

Заранее спасибо!

Обсуждение

Неизвестный
30.07.2008, 00:57
общий
это ответ
Здравствуйте, Armaniden!
В строке

$select = '|<image_list>(.*?)</image_list>|i';

поробуйте указать модификатор "s".

$select = '|<image_list>(.*?)</image_list>|is';

Если этот модификатор установлен, метасимвол dot (точка) соответствует всем символам, включая символы новой строки. Без него - символы новой строки исключаются. Вне класса символов точка в патэрне совпадает с одним из символов субъекта, включая непечатаемый символ, но не с символом newline. Если установлена опция "s", точки совпадают также и с символами newline.
Форма ответа