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

Форум Регулярные Выражения

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

 

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

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

тема: Разобрать informer.gismeteo.ru

Сообщения:  [1-10]    [11-20]  [21-30] 

 
 автор: @ndry   (06.09.2009 в 11:42)   письмо автору
 
   для: Trianon   (05.09.2009 в 13:50)
 

Для такого примера нужно писать xsl шаблон и PHP код, который всё будет обрабатывать, слишком много работы ради простого совета... =)

Если вам так интересно:
- http://xmlsoft.org/XSLT/
- http://www.w3.org/TR/xslt
- http://www.w3schools.com/xsl/xsl_languages.asp

  Ответить  
 
 автор: Trianon   (05.09.2009 в 13:50)   письмо автору
 
   для: @ndry   (05.09.2009 в 13:01)
 

привели бы пример.

  Ответить  
 
 автор: @ndry   (05.09.2009 в 13:01)   письмо автору
 
   для: heed   (28.08.2009 в 20:20)
 

Встроили давно уже...

P.S.: можно ещё использовать XSLT преобразование.

  Ответить  
 
 автор: Trianon   (31.08.2009 в 13:44)   письмо автору
 
   для: Лена   (31.08.2009 в 13:35)
 

тем не менее.
Всё ж считаю, что между восприятием фрагмента
$fp = fopen('weather.xml',"r");
$data = fread($fp,filesize('weather.xml'));

if(!empty($data)) {
$XMLparser = xml_parser_create();
xml_set_element_handler($XMLparser, 'start_element', 'end_element');
if (!xml_parse($XMLparser, $data)) {
        die(sprintf("XML error: %s at line %d",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }

$col = 2;
$n = count($heap); 
print '<table border = "1px">'; 

и им же, написанным в-квадратик, разница невелика.

  Ответить  
 
 автор: Лена   (31.08.2009 в 13:35)   письмо автору
 
   для: Trianon   (30.08.2009 в 23:42)
 

>не осилил.
Не страшно. И так работает. Просто я к вашему коду прилепила свой вывод в таблицу.

  Ответить  
 
 автор: Trianon   (30.08.2009 в 23:42)   письмо автору
 
   для: Лена   (30.08.2009 в 22:41)
 

не осилил.
Из-за форматирования.

  Ответить  
 
 автор: Лена   (30.08.2009 в 22:41)   письмо автору
 
   для: Trianon   (30.08.2009 в 01:59)
 

Спасибо.
Не понятно, почему вы поставили заглушку else if(@$cast) - $cast же все время будет иметь значение.

Если добавить еще и вывод, то получится то, что было надо:

<?php
$cast 
0;

function 
start_element($par$name$atr){
    global 
$heap$cast;
           if(
$name == 'FORECAST'){
                
$heap[] = array('date' =>$atr);
                
$cast 1;
                }
                else if(
$cast)
                
$heap[count($heap)-1][$name]=$atr;
    
/*print '<pre>';
    print_r($heap);
    print '</pre>';
    */
   
}

function 
end_element($par$name){
  global 
$cast,$heap;
    if(
$name == 'FORECAST')
    
$cast 0;

}


//$data = file_get_contents('http://informer.gismeteo.ua/xml/33345_1.xml');
$fp fopen('weather.xml',"r");
$data fread($fp,filesize('weather.xml'));

if(!empty(
$data)) {
$XMLparser xml_parser_create();
xml_set_element_handler($XMLparser'start_element''end_element');
if (!
xml_parse($XMLparser$data)) {
        die(
sprintf("XML error: %s at line %d",
                    
xml_error_string(xml_get_error_code($xml_parser)),
                    
xml_get_current_line_number($xml_parser)));
    }

$col 2;
$n count($heap); 
print 
'<table border = "1px">'
for (
$i=0$i<$n$i++){ 
    if (!(
$i%$col)) print '<tr>';
        print 
'<td><div id = "day">' $heap[$i]['date']['DAY'] . '/' $heap[$i]['date']['MONTH']; 
        print 
'</div>';

        
$img_atr 'id = "weather_img" width="15" height="15" alt="" align ="left" valign="top"';
                switch(
$heap[$i]['PHENOMENA']['CLOUDINESS']){
                       case 
0:
                       
$path_to_img 'weather_0.jpg';
                       print 
'<img src="' $path_to_img '"' $img_atr ' />';
                       break;
                       case 
1:
                       
$path_to_img 'weather_1.jpg';
                       print 
'<img src="' $path_to_img '"' $img_atr ' />';
                       break;
                       case 
2
                       
$path_to_img 'weather_2.jpg';
                       print 
'<img src="' $path_to_img '"' $img_atr ' />';
                       break;
                       case 
3:
                       
$path_to_img 'weather_3.jpg'
                       print 
'<img src="' $path_to_img '"' $img_atr ' />';
                      break;
                   }

            print 
'<div id = "tempr">' $heap[$i]['TEMPERATURE']['MAX'].' ... '.$heap[$i]['TEMPERATURE']['MIN'].'</div>';
        print 
'<div id = "wind"> С-'.$heap[$i]['WIND']['MAX'].'м/с</div>';
        print 
'<div id = "press">' $heap[$i]['PRESSURE']['MAX'].'мм.рт.ст.</div>';
        print 
'</td>';
      if (!(
$i+1%$col)) print '</tr>'

print 
"</table>";

xml_parser_free($XMLparser);
}
fclose($fp);

?>

  Ответить  
 
 автор: Trianon   (30.08.2009 в 01:59)   письмо автору
 
   для: Trianon   (30.08.2009 в 00:51)
 

Собственно, парсер, прямо заточенный под эту структуру:
<pre><?php
   $set 
= array(); $cast 0;
   function 
start_element($par$name$atr)
   {
       global 
$heap$cast;
       if(
$name == 'FORECAST')
       {
           
$heap[] = array('date' =>$atr);
           
$cast 1;
       }
       else if(@
$cast)
           
$heap[count($heap)-1][$name]=$atr;
   }

   function 
end_element($par$name)
   {
       global 
$cast;
       if(
$name == 'FORECAST')
           
$cast 0;
   }

глядеть, яcен пень, $heap

Как видите, он сильно проще универсального. Но на него был потрачен час.
А на сепаратор для универсального (который в апдейте к 30.08.2009 в 00:51) - 10 минут.

  Ответить  
 
 автор: Лена   (30.08.2009 в 00:59)   письмо автору
 
   для: Trianon   (30.08.2009 в 00:51)
 

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

  Ответить  
 
 автор: Trianon   (30.08.2009 в 00:51)   письмо автору
 
   для: Лена   (30.08.2009 в 00:49)
 

мой вариант превращает в массив любой XML-файл, вообще не вдаваясь в конкретную структуру .
И его можно поглядеть <pre> <? print_r() ?> :-)

Ну а Ваш попробую набросать.

UPD.
Если шелуху выкинуть
   <pre><?php
   $heap 
$heap['ref']
       [
'sub']['MMWEATHER'][0]
       [
'sub']['REPORT'][0]
       [
'sub']['TOWN'][0];
   
$head $heap['atr'];
   
$heap $heap['sub']['FORECAST'];
   foreach(
$heap as $n => $set)
   {
       
$newset = array('date'=>$set['atr']);
       foreach(
$set['sub'] as $k => $v)
          
$newset[$k] = $v[0]['atr'];
       
$heap[$n] = $newset;
   }
   
print_r($heap);
   
print_r($head);


останутся ядрышки :)

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-30] 

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

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