Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > парсер XML


Автор: supercelt 31.10.2009, 03:12
Помогите пожалуйста. Нужно просто просканить ленту RSS, выдернуть из неё всё что встречается между <item></item>

Код

function get_search_bazos($lines, $url)
{
global $done_2;
    foreach($lines as $line)
    {
    $line = urlencode($line);
    $page = @file_get_contents($url.$line); 
    
    preg_match_all('!<item>(.*?)</item>!', $page, $output);

        for($i=0; $i < count($output[0]); $i++)
        {
        $str = $output[0][$i];
        $done_2 .= $str.'<br />';
        }
        
    $done_2 .= '<br /><br />';
    $done_2 .= '<hr>';
    }
return $done_2;    
}

$lines = file('words.txt');
$url_2 = 'http://www.bazos.cz/rss.php?hledat=';
$done_2 = '';

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>destroy obuv - Seznam</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>';
echo get_search_bazos($lines, $url_2);
echo '</body></html>'; 


При скане, отдаваемый код такой:
Код

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Bazos.cz - recept</title><link>http://www.bazos.cz/</link>
<description>Bazoš - internetový bazar, on-line inzerce zdarma.</description>
<language>cs</language>

  <item>
    <title>KRÁSNÁ KUCHAŘKA -    200</title>
    <link>http://knihy.bazos.cz/inzerat/4498850/KRASNA-KUCHARKA.php</link>
    <description><![CDATA[<img src="http://www.bazos.cz/knihy/obr/1t/4498850.jpg" class="obrazek" />Prodám krásnou kuchařku, kde vaří známé hlasatelky a radí své oblíbené recepty. Kuchařka je úplně nová, nepoužitá, byl to nevhodný dárek, tak posílám dál. Vhodný dárek třeba k vánocům. ...]]></description>
    <pubDate>Fri, 30 Oct 2009 19:04:24 +0100</pubDate>
  </item>
  <item>
    <title>Přirozená cesta ke kráse -    140</title>
    <link>http://knihy.bazos.cz/inzerat/4497760/Prirozena-cesta-ke-krase.php</link>
    <description><![CDATA[Autor: Maria - E. Langeová - Ernstová. Témata knihy: jak šetrně pečovat o pleť a vlasy, praktické návody a recepty na přírodní kosmetické přípravky. 1x čtená, 127 stran, formát trochu větší než A5. ...]]></description>
    <pubDate>Fri, 30 Oct 2009 16:26:55 +0100</pubDate>
  </item>

</channel>
</rss>


Фишка в том, что тоже самое проделывал с HTML документом, всё работало, я искал что между тэгами <table></table>. А вот XML тэги <item></item> регулярка не видит

Автор: bars80080 31.10.2009, 12:43
если это валидный xml, то его можно разобрать с помощью готовых библиотек

Автор: supercelt 31.10.2009, 13:39
bars80080, согласен, просто интересно почему регулярка не видит эти тэги? Хотя в исходном коде они есть

Автор: brother79 6.11.2009, 09:27
попробуй 

Код

preg_match_all('/\<item\>(.*?)\<\/item\>/i s', $page, $output);


Можно конечно и с твоим разделителем, но я обычно пользуюсь тем, что указал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)