[XML]Kursy walut

0

Witam
Mam takie problem, mianowicie robię pewną stronę na której muszę mieć aktualne kursy walut.
Kursy znajdują się pod adresem http://nbp.pl/kursy/xml/c248z051223.xml
Chciałbym się dowiedzieć jak z tego pliku wyciągnąć dane.
Moja wiedze o XML'u jest raczej skromna ale jeśli ktoś podał bym mi przykładowy kod jak wyciągnąć chociaż np. kurs dolara to z reszta sobie poradze, domyślam się że trzeba przeprowadzić transformacje XSLT. Niezbyt wiem jak sie za to zabrać.
Nie chce całego kodu, tylko jakiś mały przykładzik żebym mógł się za to zabrać, tak na dobry start.
Z góry dziekuje za pomoc

0

ALe jak to chesz odczytać? Przy pomocy php czy co?
Jezeli sam xsl ci wystarczy to przeczytaj ten tutorial http://www.w3schools.com/xsl/xsl_languages.asp

0

Tak w php.
Dokładniej chodzi o to że transformujac plik xml podawałem w nim to:

<?xml-stylesheet type="text/xsl" href="plik.xsl"?>

Ale jesli plik xml z kursem walut znajduje się na obcym, zdalnym serwerze to przecież nie moge go edytować i dodać tej linijki kodu.
Wiec mój problem polega na tym jak pobrać dane z takiego pliku zdalnego i go przetransformować.
Tzn plik.xml na jakims serwerze
plik.xsl na moim serwerze
No i jak wyświetlić i przetransformować ten plik xml ze zdalnego serwera.

0

Czyli jednym słowem potrzebujesz wykonać transformację XSLT na serwerze. Żaden problem, poczytaj http://pl.php.net/manual/pl/function.xslt-create.php. Potrzebujesz mieć skompilowane PHP z opcją --with-xslt, albo z odpowiednim modułem włączonym w php.ini. Niestety, nie wszystkie serwery "zewnętrzne", tj. hostingowców to mają.

0

Tak, okej..
A gdy mój serwer nie ma takiej opcji..
Jak to zrobić bez php tzn przetransformować zewnętrzny plik xml?

0

ja nie rozumiem co masz na myśli pod słowem 'przetranformować' ? Powiedz po prostu co chcesz osiągnąć.

0

Chcę na swojej stronie wyświetlić kursy walut zawarte w pliku xml z serwera NBP - http://nbp.pl/Kursy/xml/a097z060519.xml

Efekt taki jak na tej stronie http://kursy-walut.mybank.pl/

Dane pobierane na bieŻąco (Boże, widzisz takie błędy i nie grzmisz) z NBP

0
<?
$xml_link = 'http://www.nbp.pl/Kursy/xml/a123z050628.xml';
$currentTag = "";
$startpos = 0;
$encoding = 0;
$xml_items = array();

function startTag($parser, $name, $attrs)
{
    global $currentTag, $startpos;
    $currentTag = $name;
    if ($currentTag=='POZYCJA') $startpos++;
}

function endTag($parser, $name)
{
       global $currentTag;
       $currentTag = "";
}

function characterData($parser, $data)
{
  global $currentTag, $startpos, $xml_items;
  if ($startpos > 0) {
   switch ($currentTag) {
     case 'NAZWA_WALUTY' : $xml_items[$startpos]['NAZWA_WALUTY'] .=$data; break;
     case 'KOD_WALUTY': $xml_items[$startpos]['KOD_WALUTY'].=$data; break;
     case 'KURS_SREDNI': $xml_items[$startpos]['KURS_SREDNI'].=$data; break;
   }

  } else {
  
  
  }

}

$xml_link = parse_url($xml_link);

$header  = "GET ".$xml_link["path"].(isset($xml_link["query"]) ? "?".$xml_link["query"] : false)." HTTP/1.0\r\n";
$header .= "Host: ".$xml_link['host']."\r\n";
$header .= "Content-type: application/x-www-form-urlencoded\r\n";
$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; www.inteco.win.pl)\r\n";
$header .= "Content-length: " . strlen($request) . "\r\n\r\n";

if ($xml_read = @fsockopen($xml_link['host'], ($xml_link['port']>0 ? $xml_link['port'] : 80) , $err_num, $err_msg, 10)) {

   fputs($xml_read, $header . $request);
   
   $xml_parser = xml_parser_create();
   xml_set_element_handler($xml_parser, "startTag", "endTag");
   xml_set_character_data_handler($xml_parser, "characterData");

   while ($data = fread($xml_read, 4096)) {
    if ((empty($encoding)) && (preg_match("#<\?xml.+(|encoding=\"([\w\-]+)\").*?\?>#i",$data,$enc))) {
      $encoding = preg_replace("#<\?xml.+encoding=\"([\w\-]+)\".*\?>#s","\\1",$enc[0]);
      $data = preg_replace('#(.*?)(<\?xml)#s','\\2',$data);
    }

    if (!empty($encoding)) {
      if (!xml_parse($xml_parser, $data, feof($xml_read))) {
      die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));

      }
    }
   }
   
   xml_parser_free($xml_parser);
}

//tutaj kod przykladowy; wyswietla walute dolara amerykanskiego i euro
echo $xml_items[1]['NAZWA_WALUTY'].' >> '.$xml_items[1]['KOD_WALUTY'].' >> '.$xml_items[1]['KURS_SREDNI']."<br>\r\n";
echo $xml_items[5]['NAZWA_WALUTY'].' >> '.$xml_items[5]['KOD_WALUTY'].' >> '.$xml_items[5]['KURS_SREDNI'];
?>
0

Dzięki Maniek za poświęcony czas ale niestety nie działa.

0

Jak nie jak tak:
http://inteco.win.pl/nc/waluta.php

Tylko musisz podać swój link do walut (on jest co pewienczas zmieniany), tj:

...
$xml_link = 'http://nbp.pl/Kursy/xml/a097z060519.xml';
...

p.s. Duzo czasu nie poswiecalem bo to moj stary skrypt. :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1