kushnirt
Новичок
dom в рнр5 (непонятки)
PHP5.0.5, apache 2, windows-2000
пишу rss парсер на php5 (не спрашивайте зачем, жизнь так устроена ( )
ответственный кусок скрипта:
....
$a= $dom->documentElement->childNodes;
$a=$a->item(0);// находим "channel"
$b=$a->childNodes;
print_r($b);
for($i=0; $i< $b->length; $i++)
{
//$channel_prop- некоторый массив свойств из rss2
if (array_search (($b->item($i)->nodeName), $channel_prop) and ($b->item($i)->nodeName) != 'item')
{
echo '-'.$b->item($i)->nodeName;
echo '-'.$b->item($i)->nodeValue.'<br>';
};
};
парсит:
- <channel>
<title>Lenta.ru</title>
<link>http://lenta.ru</link>
<description>Ежедневная интернет-газета Lenta.ru. Новости со всего мира на русском языке</description>
- <image>
<url>http://img.lenta.ru/i/logo.gif</url>
<title>Lenta.ru</title>
<link>http://lenta.ru</link>
</image>
- <item>
<title>Ходорковский поздравил Путина с днем рождения</title>
<link>http://lenta.ru/news/2005/10/07/congratulations/</link>
<description>7 октября Владимиру Путину исполняется 53 года. Газета "Коммерсант" публикует поздравление президенту от Михаила Ходорковского. "Есть люди, которые умеют говорить о ваших достоинствах профессионально. Я в
.......
Имеем:
-link-http://lenta.ru
-description-Ежедневная интернет-газета Lenta.ru. Новости со всего мира на русском языке
-image- http://img.lenta.ru/i/logo.gif Lenta.ru http://lenta.ru
проблема в том, что в nodeValue ноды image (у нее значения нет), попадают величины из дочерних узлов.
мб я чего- то не догоняю, и это правильно?
и как можно от этого избавится?
-~{}~ 20.10.05 19:14:
Оч благодарен за помощь и активное участие.
Проблему решил, она заключалась в том, что формально Dom - php5
считает nodeValue как firstChild от node. Не знаю, понятно ли я объяснил, но кусок кода вида
Решает проблему.
PHP5.0.5, apache 2, windows-2000
пишу rss парсер на php5 (не спрашивайте зачем, жизнь так устроена ( )
ответственный кусок скрипта:
....
$a= $dom->documentElement->childNodes;
$a=$a->item(0);// находим "channel"
$b=$a->childNodes;
print_r($b);
for($i=0; $i< $b->length; $i++)
{
//$channel_prop- некоторый массив свойств из rss2
if (array_search (($b->item($i)->nodeName), $channel_prop) and ($b->item($i)->nodeName) != 'item')
{
echo '-'.$b->item($i)->nodeName;
echo '-'.$b->item($i)->nodeValue.'<br>';
};
};
парсит:
- <channel>
<title>Lenta.ru</title>
<link>http://lenta.ru</link>
<description>Ежедневная интернет-газета Lenta.ru. Новости со всего мира на русском языке</description>
- <image>
<url>http://img.lenta.ru/i/logo.gif</url>
<title>Lenta.ru</title>
<link>http://lenta.ru</link>
</image>
- <item>
<title>Ходорковский поздравил Путина с днем рождения</title>
<link>http://lenta.ru/news/2005/10/07/congratulations/</link>
<description>7 октября Владимиру Путину исполняется 53 года. Газета "Коммерсант" публикует поздравление президенту от Михаила Ходорковского. "Есть люди, которые умеют говорить о ваших достоинствах профессионально. Я в
.......
Имеем:
-link-http://lenta.ru
-description-Ежедневная интернет-газета Lenta.ru. Новости со всего мира на русском языке
-image- http://img.lenta.ru/i/logo.gif Lenta.ru http://lenta.ru
проблема в том, что в nodeValue ноды image (у нее значения нет), попадают величины из дочерних узлов.
мб я чего- то не догоняю, и это правильно?
и как можно от этого избавится?
-~{}~ 20.10.05 19:14:
Оч благодарен за помощь и активное участие.
Проблему решил, она заключалась в том, что формально Dom - php5
считает nodeValue как firstChild от node. Не знаю, понятно ли я объяснил, но кусок кода вида
PHP:
if(($v->firstChild->nodeType)!=XML_ELEMENT_NODE)
{
echo ('<br>'.$v->nodeName);
echo ('----'.$v->firstChild->nodeValue);
}
else
{
echo ([$v->nodeName]= 'а это был текст!!!');
};