Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DOM XML
 
 автор: 1999   (14.02.2007 в 00:16)   письмо автору
 
 

Собственно навеяно этим - http://php.net/dom

Всегда думал, что RSS надо разбирать регулярками, но после поста Loki в предыдущей теме о разборе потока с яндекса поглядел это и.. офигел... это что за зверство?
собственно вопросов 3:

1) это все работает только в 5 версии пхп? и если нет, то вобще как оно все, быстрее регулярок? или нет?
2) в любом случае ругулярки используются и тут.. ну как я понял.. так имеет смысл переходить на этот способ?
3) а ф-ции xml_load_engine - вобще получается к разбору XML-документа не относятся?

   
 
 автор: Loki   (14.02.2007 в 10:01)   письмо автору
 
   для: 1999   (14.02.2007 в 00:16)
 

1 DOMXML работает в 4 версии, в пятой - domDocument. Утверждается что быстрее, но я замеров не проводил.
2. нет. регулярки тут не используются.

У метода есть два больших недостатка: на входе требуется валидный xml. Впрочем, при желании можно так с исходниками накосячить, что никакие регулярки не поймут. И требуется полностью загрузить документ (иначе не убедится в его валидности)

   
 
 автор: 1999   (14.02.2007 в 22:28)   письмо автору
 
   для: Loki   (14.02.2007 в 10:01)
 

а можно какой-нить пример простенький с ДОМом, а то там пхп.нет такое...
нру хотя бы разбор яндексовской какой-нить ленты

   
 
 автор: Саня   (15.02.2007 в 00:50)   письмо автору
 
   для: 1999   (14.02.2007 в 22:28)
 

<?php
$content 
file_get_contents("http://news.yandex.ru/Russia/computers.rss");
$dom DOMDocument::LoadXML($content);
$items $dom->GetElementsByTagName("item");

for (
$i 0$i $items->length$i++) {
  
$child $items->item($i)->childNodes;

  
$link $child->item(3)->nodeValue;
  print 
'<h3><a href="'.$link.'">'.$child->item(1)->nodeValue."</a></h3>\n".
        
"<p>".
        
$child->item(5)->nodeValue."<br/>\n".
        
$child->item(7)->nodeValue.
        
"</p></br>\n\n";
}

http://softtime.ru/forum/read.php?id_forum=1&id_theme=30966
http://softtime.ru/forum/read.php?id_forum=1&id_theme=30985

   
 
 автор: 1999   (11.03.2007 в 16:31)   письмо автору
 
   для: Саня   (15.02.2007 в 00:50)
 

собственно хочу поднять тему из-за извечной проблемы кодировки
как сделать, чтоб результаты обработки RSS этим скриптом отображались не каракулями, а нормальными русскими буквами?
Просто не хочется извращаться так как указано было:

<?php
header
('Content-type: text/html; charset=windows1251');
//...
$xml iconv('windows-1251''urf-8'$xml);
//...
ob_start();
print_r($array)
$text ob_get_contents();
ob_end_clean();

print 
iconv('utf-8''windows-1251'$text);
?> 


и кстати еще момент... если на сервере стоит 4.4.2, то все это работать не будет, так?

   
 
 автор: Саня   (11.03.2007 в 16:57)   письмо автору
 
   для: 1999   (11.03.2007 в 16:31)
 

Вот код с автоматическим преобразованием в cp1251:
<?php
$content 
file_get_contents("http://news.yandex.ru/Russia/computers.rss");
$dom DOMDocument::LoadXML($content);
$items $dom->GetElementsByTagName("item");

for (
$i 0$i $items->length$i++) {
  
$child $items->item($i)->childNodes;

  
$link $child->item(3)->nodeValue;
  
$title iconv("UTF-8""WINDOWS-1251"$child->item(1)->nodeValue);
  
$description iconv("UTF-8""WINDOWS-1251"$child->item(5)->nodeValue);

  print 
'<h3><a href="'.$link.'">'.$title."</a></h3>\n".
        
"<p>".$description."<br/>\n".
        
$child->item(7)->nodeValue.
        
"</p></br>\n\n";
}

> и кстати еще момент... если на сервере стоит 4.4.2, то все это работать не будет, так?
не будет

   
 
 автор: 1999   (11.03.2007 в 17:28)   письмо автору
 
   для: Саня   (11.03.2007 в 16:57)
 

а как лучше подстроить под 4 пхп? ведь DOM XML вроде отличается от DOM только названиями ф-ций....

   
 
 автор: Саня   (11.03.2007 в 17:50)   письмо автору
 
   для: 1999   (11.03.2007 в 17:28)
 

В php4 можно использовать XML Parser и регулярные выражения.
<?php
$content 
file_get_contents("http://news.yandex.ru/Russia/computers.rss");
preg_match_all("!<item>\s*<title>(.+)</title>\s*".
               
"<link>(.+)</link>\s*".
               
"<description>(.+)</description>\s*".
               
"<pubDate>(.+)</pubDate>.+</item>!isU"$content$m);
for ( 
$i 0$i count($m[0]); $i++ ) {
  print 
'<h3><a href="'.$m[2][$i].'">'.$m[1][$i]."</a></h3>\n".
        
"<p>".htmlspecialchars_decode($m[3][$i]).
        
"</br>\n".$m[4][$i]."</p></br>\n\n";
}

   
 
 автор: 1999   (11.03.2007 в 17:59)   письмо автору
 
   для: Саня   (11.03.2007 в 17:50)
 

а нет варианта для DOM XML?

   
 
 автор: Саня   (11.03.2007 в 18:15)   письмо автору
 
   для: 1999   (11.03.2007 в 17:59)
 

Ну я с ним никогда не работал, так что помочь не могу.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования