Prikaz podataka iz xml fajla

Pozzz ekipa,

molio bih za pomoć u vezi ispisivanja podataka iz xml fajla. Ovako, ako imam xml fajl u kojem se nalaze podaci, koja je php sintaksa za izvući podatak i prikazati gra pravilno na stranici. Stranica je na Joomli, ali nema veze, može u J! se uvaliti i code =)

Evo primjer xml fajla:

<grad naziv="BanjaLuka">

<danas>
<datum>4.2.2009.</datum>
<vrijememjerenja>13</vrijememjerenja>
<prognoza>oblačno</prognoza>
<temperatura>7oC</temperatura>
<vlaznost>/%</vlaznost>
<tlak>982 hPa</tlak>
<brzinavjetra>1 m/s</brzinavjetra>
<smjervjetra>WNW</smjervjetra>
<vidljivost>4 km</vidljivost>
<padavine>/ l/m2</padavine>
<snijeg>/ cm</snijeg>
<prijepodne>oblačno s kišom</prijepodne>
<poslijepodne>oblačno</poslijepodne>
<maxtemperatura>3</maxtemperatura>
<mintemperatura>8</mintemperatura>
</danas>
</grad>

Kako sada izvući podatke za dotični grad?

Unaprijed hvala…

Pogledaj si ovo. Poprilično je lijepo objašnjeno :).

http://www.kirupa.com/web/xml_php_parse_beginner.htm

E, prijatelju moj, da ja to znam uraditi, ne bih plakao za pomoć…

Prvo, to je vanjski .xml fajl koji bih kupio sa vanjskog sajta, drugo u ovom fajlu ima 20 gradova iz BiH, dok meni treba podatke samo za jedan.
Da li mogu sa “fopen” “fread” i “fclose” raditi sa vanjskim .xml fajlovima?
Kako ubaciti prije parsanja uvjet za točno taj grad koji meni treba? Sa “where”?

Evo link od tog .xml fajla, pa ako netko ima volje…

Unaprijed hvala!

Da ovo bude što jednostavije ja bi to ovako napravio. Pošto je to xml možeš ovako.

Pomoću funkcija strpos i substr

U nizu su ti vraćene vrijednosti tipa:

Array
(
    [datum] => 4.2.2009.
    [vrijememjerenja] => 13
    [prognoza] => oblačno
    [temperatura] => 7oC
    [vlaznost] => /%
    [tlak] => 982 hPa
    [brzinavjetra] => 1 m/s
    [smjervjetra] => WNW
    [vidljivost] => 4 km
    [padavine] => / l/m2
    [snijeg] => / cm
    [prijepodne] => oblačno s kišom
    [poslijepodne] => oblačno
    [maxtemperatura] => 3
    [mintemperatura] => 8
)

Nadam se da si shvatio ;).

:slight_smile:

Ovdje se nema što za shvatiti, pošto si ti sve napisao, svaka ti čast i velika ti hvala.

Sutra ću probati kako to funkcionira na live sajtu.

Pozzz.
Nakon “određenih” problema sa igubljenima passwordom sa foruma, evo mene opet.
Probao sam iskoristiti kod koji si mi dao, ali bez uspjeha, kod mi ne vraća ništa nazad, tj. dobijem samo prazan modul.
Napravio sam ovo:

<?php
  
$tvojaDatoteka = file_get_contents('http://www.fhmzbih.gov.ba/RSS/FHMZBIH.xml');

//Tražiš početak tvog grada
$pos = strpos($tvojaDatoteka, '<grad naziv="BanjaLuka">');

//Tražiš kraj grada (+7 zato šta je duljina </grad> = 7)
$kraj = strpos($tvojaDatoteka, '</grad>', $pos) + 7;

//Tu su tvoji podatci
$podatci = substr($tvojaDatoteka, $pos, ($kraj - $pos));

//Tag od kojeg želiš vrijednost
$tags = array(
    'datum',
    'vrijememjerenja',
    'prognoza',
    'temperatura',
    'vlaznost',
    'tlak',
    'brzinavjetra',
    'smjervjetra',
    'vidljivost',
    'padavine',
    'snijeg',
    'prijepodne',
    'poslijepodne',
    'maxtemperatura',
    'mintemperatura'
);
foreach ($tags as $tag) {
    //Traži početak taga
    $pos = strpos($podatci, '<' . $tag . '>') + 2 + strlen($tag);
  
    //Traži kraj taga
    $kraj = strpos($podatci, '</' . $tag . '>');
  
    //Ovo ti je vrijednost taga
    $vrijednost[$tag] = substr($podatci, $pos, ($kraj - $pos));
}
?>

Probao sam 2 različita hosta, da vidim da nije nešto na njihovoj strani, ali ne radi …
Ako može netko pomoći, unaprijed hvala!

Pokusaj ovako (ja sam sad probao i meni radi):

[php]
function ReadFromXML ($xmlfilename, $grad, $dan) {
$xmlcontent = str_replace("\t", “”, file_get_contents($xmlfilename));
$xmllines = explode("\n", $xmlcontent);
$level = 0;
if ($startsearch = array_search("<grad naziv="$grad">", $xmllines)) {
$endsearch = array_search("", $xmllines, $startsearch);
$ssearch = array_search("<$dan>", $xmllines, $startsearch);
$esearch = array_search("</$dan>", $xmllines, $ssearch);
for ($i = $ssearch + 1; $i < $esearch; $i++) {
$row = trim($xmllines[$i]);
$pos1 = strpos($row, “<”); $pos2 = strpos($row, “>”);
$xtag = substr($row, $pos1 + 1, $pos2 - $pos1 - 1);
$res[$xtag] = trim(
substr($row, $pos1 + strlen($xtag) + 2,
strlen($row) - (2 * strlen($xtag)) - 5));
}
} else {
$res = false; }
return $res;
}[/php]

Sad pozovi funkciju negde, npr:
[php]$meteodata = ReadFromXML (“http://www.fhmzbih.gov.ba/RSS/FHMZBIH.xml”,
“BanjaLuka”, “danas”);[/php]

$meteodata je array koji ima indexe sa odgovarajucim poljima iz XML-a.

Probaj da vidis sta ces dobiti:
[php]print_r($meteodata)[/php]

Ako je sve kako treba trebalo bi da dobijes nesto ovako u kodu:

Array
(
    [datum] => 14.5.2009.
    [vrijememjerenja] => 11
    [prognoza] => pretežno oblačno
    [temperatura] => 20oC
    [vlaznost] => /%
    [tlak] => 996 hPa
    [brzinavjetra] => 1 m/s
    [smjervjetra] => WNW
    [vidljivost] => 20 km
    [padavine] => / l/m2
    [snijeg] => / cm
    [prijepodne] => umjereno oblačno
    [poslijepodne] => pretežno vedro
    [maxtemperatura] => 14
    [mintemperatura] => 26
)

Ovaj primer radi slicno sto i onaj od arahnophobia s tim da sam cita indekse u slucaju da dodje do izmena u XML-u kako ne bi doslo do pucanja skripte, barem nece puci na indeksima :wink:

Moja greska… mislio sam na primer koji je postavio 3D-Zlikavac :wink:

@himzo :kuc:

Veoma ti hvala na konkretnom odgovoru, no ima jedan problem.
Kada promijenim ima grada, tj. trebaju mi podaci za drugi grad, kod ispisiva uvijek podatke za prvi grad tj. grad “BanjaLuka”.

Sad ne znam jeli kriv cache na serveru ili nešto drugo…

Ja sam evo sad probao i sa par drugih gradova i radi. Probao sam na lokalnom serveru i cache je iskljucen… moguce je. Ipak mislim da postoji resenje sa < meta > elementom kako bi se iskljucio cache za konkretnu stranicu, tj. iniciralo brisanje privremenih podataka kada klijent napusti stranicu.

Probaj ovako nesto ali nisam siguran:

<meta http-equiv="CACHE-CONTROL" content="no-cache">
ili
<meta http-equiv="Pragma" content="no-cache">

Nisam to zaista nikada koristio pa ne znam ali ako neko zna moze pomoci ili google pa dok ne nadjes resenje :slight_smile:

Evo nasao sam gresku… samo zameni funkciju gore sa sledecom, ja sam napravio gresku u sintaksi… nema nikakve veze sa cache

[php] function ReadFromXML ($xmlfilename, $grad, $dan) {
$xmlcontent = str_replace("\t", “”, file_get_contents($xmlfilename));
$xmllines = explode("\n", $xmlcontent);
$level = 0;
if ($startsearch = array_search("<grad naziv="$grad">", $xmllines)) {
for ($i = $startsearch + 1; $i <= sizeof($xmllines); $i++) {
$row = trim($xmllines[$i]);
if (is_int(strpos($row, “<$dan>”))) { $ssearch = $i; }
if (is_int(strpos($row, “</$dan>”))) { $esearch = $i; }
if (is_int(strpos($row, “”))) { $endsearch = $i; break; }}
for ($i = $ssearch + 1; $i < $esearch; $i++) {
$row = trim($xmllines[$i]);
$pos1 = strpos($row, “<”); $pos2 = strpos($row, “>”);
$xtag = substr($row, $pos1 + 1, $pos2 - $pos1 - 1);
$res[$xtag] = trim(
substr($row, $pos1 + strlen($xtag) + 2,
strlen($row) - (2 * strlen($xtag)) - 5));
}
} else {
$res = false; }
return $res;
}
[/php]

@himzo, puno hvala, sve radi kao sat!

Sad još moram srediti malo prikaz na sajtu, ali valjda ću se snaći nekako!

:zhuja:

Oprostite što dižem temu iz mrtvih, ali vezano je za isto stvar, pa da ne otvaram novu.

Naime, želio bih da mi u ovisnosti od vrijednosti iz array-a “prognoza” se pojavi iz slika tog “oblačnog” iz foldera u koji bih stavio sličice vezane za prognozu.

Molio bih za pomoć i unaprijed hvala!

pošto nigdje nisam pronašao slične dostupne hrvatske xml file, poslužio sam se sa LINK i onda pomoću LINK složio malu modifikaciju za svoje osobne stranice

kako je ispalo može se vidjeti OVDJE

Probao sam malo po tvojim uputama “paor”, ali na žalost nisam uspio. Koristim kod koji je uradio"himzo" s tim da sam ja ograničio ispis samo određenih podataka. Kod izgleda ovako:

<?php
$meteodata = ReadFromXML ("http://www.fhmzbih.gov.ba/RSS/FHMZBIH.xml", "IME_GRADA", "danas");
function ReadFromXML ($xmlfilename, $grad, $dan) {
    $xmlcontent = str_replace("\t", "", file_get_contents($xmlfilename));
    $xmllines = explode("
", $xmlcontent);
    $level = 0;
    if ($startsearch = array_search("<grad naziv=\"$grad\">", $xmllines)) {
      for ($i = $startsearch + 1; $i <= sizeof($xmllines); $i++) {
        $row = trim($xmllines[$i]);
        if (is_int(strpos($row, "<$dan>"))) { $ssearch = $i; }
        if (is_int(strpos($row, "</$dan>"))) { $esearch = $i; }
        if (is_int(strpos($row, "</grad>"))) { $endsearch = $i; break; }}
      for ($i = $ssearch + 1; $i < $esearch; $i++) {
        $row = trim($xmllines[$i]);
        $pos1 = strpos($row, "<"); $pos2 = strpos($row, ">");
        $xtag = substr($row, $pos1 + 1, $pos2 - $pos1 - 1);
        $res[$xtag] = trim(
          substr($row, $pos1 + strlen($xtag) + 2, 
                 strlen($row) - (2 * strlen($xtag)) - 5));
        }
      } else { 
        $res = false; }
    return $res;
    }
echo "Vrijeme u $meteodata[vrijememjerenja] sati";
echo "
";
echo "Temperatura: $meteodata[temperatura]"; 
echo "
";
echo "Vrijeme: $meteodata[prognoza]"; 
echo "
";
?>

I to sve radi kao sat. Ono što bih htio ja, jeste da u ovisnosti od varijable “prognoza” mogu prikazati i određenu .gif sličicu iz nekog foldera na serveru da sve to malo ljepše izgleda na stranici.
Nadam se da ste shvatili moje muke =))

Unaprijed hvala!