|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: @ndry
(05.09.2009 в 13:01)
| | привели бы пример. | |
|
|
|
|
|
|
|
для: heed
(28.08.2009 в 20:20)
| | Встроили давно уже...
P.S.: можно ещё использовать XSLT преобразование. | |
|
|
|
|
|
|
|
для: Лена
(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">';
|
и им же, написанным в-квадратик, разница невелика. | |
|
|
|
|
|
|
|
для: Trianon
(30.08.2009 в 23:42)
| | >не осилил.
Не страшно. И так работает. Просто я к вашему коду прилепила свой вывод в таблицу. | |
|
|
|
|
|
|
|
для: Лена
(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 в 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 минут. | |
|
|
|
|
|
|
|
для: 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);
|
останутся ядрышки :) | |
|
|
|
|