Autor | Zpráva | ||
---|---|---|---|
Ecrazit Profil * |
#1 · Zasláno: 10. 3. 2012, 04:25:52
Zdravím, snažím se napsat PHP parser, který mi přečte údaje o počasí z XML souboru. Kód mám napsaný, ale nefunguje mi výpis posledních 3 polí. Vypíše mi to pole $datum[] a $den[], ale už mi to nevypíše pole $teplota_max[], $teplota_min[] a $stav[]. Jedná se o pole vytvářené ve funkci znaky().
XML soubor: <?xml version="1.0" encoding="UTF-8"?> <pocasi> <benesov> <predpoved den="10.3." id_dne="0" nazev_dne="Sobota"> <stav>4</stav> <teplota_max>9</teplota_max> <teplota_min>-1</teplota_min> </predpoved> <predpoved den="11.3." id_dne="1" nazev_dne="Neděle"> <stav>10</stav> <teplota_max>8</teplota_max> <teplota_min>2</teplota_min> </predpoved> <predpoved den="12.3." id_dne="2" nazev_dne="Pondělí"> <stav>10</stav> <teplota_max>8</teplota_max> <teplota_min>3</teplota_min> </predpoved> <predpoved den="13.3." id_dne="3" nazev_dne="Úterý"> <stav>4</stav> <teplota_max>10</teplota_max> <teplota_min>4</teplota_min> </predpoved> </benesov> <cr_vyhled> <predpoved den="14.3." id_dne="4" nazev_dne="Středa"> <stav>4</stav> <teplota_max>11</teplota_max> <teplota_min>3</teplota_min> </predpoved> <predpoved den="15.3." id_dne="5" nazev_dne="Čtvrtek"> <stav>3</stav> <teplota_max>12</teplota_max> <teplota_min>3</teplota_min> </predpoved> <predpoved den="16.3." id_dne="6" nazev_dne="Pátek"> <stav>3</stav> <teplota_max>15</teplota_max> <teplota_min>4</teplota_min> </predpoved> <predpoved den="17.3." id_dne="7" nazev_dne="Sobota"> <stav>4</stav> <teplota_max>15</teplota_max> <teplota_min>5</teplota_min> </predpoved> </cr_vyhled> </pocasi> PHP soubor: <?php $soubor = 'pocasi.xml'; $size = filesize($soubor); $id = ''; $datum = array(); $den = array(); $stav = array(); $teplota_min = array(); $teplota_max = array(); $znacka = ''; $parser = xml_parser_create(); function start ($parser, $nazev, $atributy) { global $id, $datum, $den, $znacka; if ($nazev == 'PREDPOVED') { $id = $atributy['ID_DNE'] + 1; $datum[$id] = $atributy['DEN']; $den[$id] = $atributy['NAZEV_DNE']; } if ($nazev == 'STAV') $znacka = 'stav'; if ($nazev == 'TEPLOTA_MAX') $znacka = 'max'; if ($nazev == 'TEPLOTA_MIN') $znacka = 'min'; } function finish ($parser, $nazev) {} function texty ($parser, $data) { global $id, $znacka, $stav, $teplota_max, $teplota_min; if ($znacka == 'stav') $stav[$id] = $data; if ($znacka == 'max') $teplota_max[$id] = $data; if ($znacka == 'min') $teplota_min[$id] = $data; } xml_set_element_handler($parser, 'start', 'finish'); xml_set_character_data_handler($parser, 'texty'); if(!($soubor = fopen($soubor, "r"))) { die("Nelze otevřít soubor XML!!"); } else while ($d = fread($soubor, $size)) { if (!xml_parse($parser, $d, feof($soubor))) die("Vyskytla se chyba v XML!"); } xml_parser_free($parser); // Odtudd vypisuji výsledky echo $den[1]; echo $datum[3]; echo $stav[1]; echo $teplota_min[5]; echo $teplota_max[1]; ?> |
||
Majkl578 Profil |
#2 · Zasláno: 10. 3. 2012, 05:23:07
|
||
Ecrazit Profil * |
#3 · Zasláno: 10. 3. 2012, 13:08:40
Teprve se PHP učím a tohle je způsob z jednoho seriálu. Nefunguje znamená, že pole na konci skriptu jsou prázdní, ikdyž by měli obsahovat údaje o teplotách...
|
||
Alphard Profil |
#4 · Zasláno: 10. 3. 2012, 13:40:37
<?php $weather = simplexml_load_file('data/xml_01.xml'); foreach ($weather->cr_vyhled->predpoved as $day) { $a = $day->attributes(); echo $a->nazev_dne, ' ', $a->den, ': ', $day->teplota_min, ' - ', $day->teplota_max, PHP_EOL; } Váš seriál vyhoďte. |
||
Ecrazit Profil * |
#5 · Zasláno: 10. 3. 2012, 14:20:05
Jo tak to je něco uplne jinyho, díky :) bohuzel ale OOP vůbec neumím. Doporučil by mi někdo nějaký seriál, kde bych se naučil alespon základy OOP v PHP?
|
||
Časová prodleva: 14 let
|
0