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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Разбор XML :: свой парсер или сторонние разработки?

Сообщения:  [1-10]   [11-16] 

 
 автор: Trianon   (24.05.2008 в 11:39)   письмо автору
 
   для: antf_   (24.05.2008 в 08:48)
 

И риск загнать ошибку в каждый из индивидуальных файлов.
Мне-то что... как нравится - так и пишите. :)

   
 
 автор: Trianon   (24.05.2008 в 11:37)   письмо автору
 
   для: @ndry   (24.05.2008 в 10:22)
 

внимательно читаем самое первое сообщение в треде.

   
 
 автор: @ndry   (24.05.2008 в 10:22)   письмо автору
 
   для: antf   (23.05.2008 в 10:18)
 

simpleXML вам в помщь

   
 
 автор: antf_   (24.05.2008 в 08:48)
 
   для: Trianon   (23.05.2008 в 23:26)
 

Я подумал, что лучше написать индивидуальный парсер для каждого файла, чем SAX-ом заниматься: массив не такой громоздкий получится и код читабильнее.

   
 
 автор: Trianon   (23.05.2008 в 23:32)   письмо автору
 
   для: antf   (23.05.2008 в 23:28)
 

если бы Вы оставили её в таком виде
$heap['ref']['data'].=$data;
тогда да.

А так как у Вас - Вы просто заблокировали коллекцию данных тега. Вот их у Вас и не стало.

   
 
 автор: antf   (23.05.2008 в 23:28)   письмо автору
 
   для: Trianon   (23.05.2008 в 23:21)
 

Она перекодирует в utf-8. У меня на локалке не стоит, поэтому отключил.

   
 
 автор: Trianon   (23.05.2008 в 23:26)   письмо автору
 
   для: antf   (23.05.2008 в 23:15)
 

парсер не нужно.
а вот этот код - придется.
$item = $out['ref']['sub']['RSS'][0]['sub']['CHANNEL'][0]['sub']['ITEM'];
   unset($out);
   $item = array_slice($item, max(0, count($item)-10));
   foreach($item as $k => $v)
   {
      $r = array();
      foreach($v['sub'] as $tag => $val) $r[$tag] = $val[0]['data'];
      $out[$k] = $r;
   }
   unset($item);
   echo '<pre>';
   print_r($out); 

ну собственно им решается задача, подобная этой
(выборка содержимого 4 тега <image>, который в свою очередь вложен в 3-й тег <item> )

   
 
 автор: Trianon   (23.05.2008 в 23:21)   письмо автору
 
   для: antf   (23.05.2008 в 23:15)
 

не понял. А вот эта закоментаренная строчка
$heap['ref']['data'].=iconv("utf-8", "windows-1251", $data);
разве не содержимое тегов вытаскивает?

   
 
 автор: antf   (23.05.2008 в 23:15)   письмо автору
 
   для: antf   (23.05.2008 в 23:11)
 

Нужно ли подстраивать парсер под конкретные теги?

   
 
 автор: antf   (23.05.2008 в 23:11)   письмо автору
 
   для: Trianon   (23.05.2008 в 22:39)
 

Нашел код парсера на основе SAX в приведенных темах. Только он видит только атрибуты, но не видит содержимое тегов.


<?php

   error_reporting
(E_ALL);

   
$url "bbeditor.xml";
   
$res file_get_contents($url);

   function 
start_element($par$name$atr)
   {
       
$tmp = array('data' => '''name' => $name'atr' => $atr);

       global 
$heap$l = ++$heap['level']; $lp $l 1;
       
$heap['stack'][$l] = $heap['ref'];
       
$heap['ref'] = array('data' => '');
       if(!empty(
$atr)) $heap['ref']['atr'] = $atr;
   }
   function 
end_element($par$name)
   {
       global 
$heap$l = --$heap['level']; $ln $l 1;
       
$tmp $heap['ref'];
       
$heap['ref'] = $heap['stack'][$ln];
       unset(
$heap['stack'][$ln]);
       
$heap['ref']['sub'][$name][] =  $tmp;
   }
   function 
element_data($par$data)
   {
       global 
$heap;
       
$data trim($data);
       
//if('' != trim($data))
       //    $heap['ref']['data'].=iconv("utf-8", "windows-1251", $data);
   
}

   
$p xml_parser_create("");

   
$heap['level'] = 0;
   
$heap['ref'] = array();
   
xml_set_element_handler($p'start_element''end_element');
   
xml_set_character_data_handler($p'element_data');
   
xml_parse($p$res);
   echo 
'<pre>';
   
var_dump($heap);
?>

   

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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