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

Форум 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