Avatar billede da_kbaz Nybegynder
14. november 2004 - 17:21 Der er 11 kommentarer

Hente XML valutakurser via PHP

Her ligger et XML-dokument med opdaterede valutakurser : http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml

Jeg ønsker at trække disse data ud vha PHP, og smide dataene i en selectbox. Jeg har PHP5, men alligevel har jeg problemer med at bruge SimpleXML og andre metoder.

Deusden står dataene i valuta.xml i attributter? Hvordan ksal jeg håndtere dette?

Hvis jeg bare kunne få det hele ind i et objekt som jeg kunne loope igennem og kaste rundt med så tosset jeg ville, så ville jeg være en glad mand :-)
Avatar billede olebole Juniormester
14. november 2004 - 18:20 #1
<ole>

Hvad er det for problemer, du har med simpleXML?

Attributter henter du med:
  print XMLElement->attributes(0);  // Udskriver elementets første attribut

/mvh
</bole>
Avatar billede olebole Juniormester
14. november 2004 - 18:22 #2
... du har jo netop XML-DOM'en liggende i et objekt, når du bruger simpleXML - temmelig meget, som man plejer, når man arbejder med XML-DOM  :)
Avatar billede da_kbaz Nybegynder
14. november 2004 - 19:30 #3
HAr siddet og rodet med det her hele dagen nu :-(

HVordan får jeg hentet den eksterne fil, åbnet den, og så parset den, så jeg får nogle arrays at arbejde med? Søger måske mere end "færdig og klar"-løsning lige nu, da jeg er gået lidt død i det efterhånden :-/
Avatar billede olebole Juniormester
14. november 2004 - 23:08 #4
Prøv:

$sXML = file_get_contents("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
$oXML = simplexml_load_string($sXML);
foreach( $oXML->exchangerates->dailyrates->currency as $currency ) {
    print "Code: ".$currency["code"]."<br>\n";
    print "Desc: ".$currency["descr"]."<br>\n";
    print "Rate: ".$currency["rate"]."<br>\n";
    print "--------------------<br>\n";
}
Avatar billede olebole Juniormester
14. november 2004 - 23:14 #5
Kan du ikke få det til at virke, så prøv at udskrive på formen:
  print "Code: ".((string) $currency["code"])."<br>\n";

Jeg har ikke selv en version 5 installeret, så jeg kan ikke teste  :)
Avatar billede da_kbaz Nybegynder
15. november 2004 - 00:19 #6
jeg får den her fejl :
Warning: Invalid argument supplied for foreach() in /usr/home/web/web24784/valuta2.php on line 6
Avatar billede da_kbaz Nybegynder
15. november 2004 - 01:12 #7
Så fik jeg rettet det til så den ikke melder fejl.
Jeg får data tilbage korrekt nu, men de kommer tilbage som "SimpleXML objects", så jeg kan ikke bare skubbe det ind i et array?

  // XML sti
  $sXML = file_get_contents("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");

  // hent strengen ind i XML parseren
  $oXML = simplexml_load_string($sXML);

  // Loop igennem data
  foreach( $oXML->dailyrates->currency as $currency ) {

  print_r($currency['rate']);


  }

Output :

SimpleXMLElement Object ( [0] => 743.16 ) SimpleXMLElement Object ( [0] => 575.16 ) SimpleXMLElement Object ( [0] => 1060.75 ) SimpleXMLElement Object ( [0] => 82.88 ) SimpleXMLElement Object ( [0] => 91.60 ) SimpleXMLElement Object ( [0] => 8.53 ) SimpleXMLElement Object ( [0] => 488.76 ) SimpleXMLElement Object ( [0] => 482.76 ) SimpleXMLElement Object ( [0] => 5.4273 ) SimpleXMLElement Object ( [0] => 440.76 ) SimpleXMLElement Object ( [0] => 398.46 ) SimpleXMLElement Object ( [0] => 47.50 ) SimpleXMLElement Object ( [0] => 1094.33 ) SimpleXMLElement Object ( [0] => 215.23 ) SimpleXMLElement Object ( [0] => 173.30 ) SimpleXMLElement Object ( [0] => 23.58 ) SimpleXMLElement Object ( [0] => 3.04 ) SimpleXMLElement Object ( [0] => 73.96 ) SimpleXMLElement Object ( [0] => 347.77 ) SimpleXMLElement Object ( [0] => 866.80 ) SimpleXMLElement Object ( [0] => 379.96 ) SimpleXMLElement Object ( [0] => 1286.86 ) SimpleXMLElement Object ( [0] => 1720.28 ) SimpleXMLElement Object ( [0] => 0.0185 ) SimpleXMLElement Object ( [0] => 3.10 ) SimpleXMLElement Object ( [0] => 18.76 ) SimpleXMLElement Object ( [0] => 0.00040 ) SimpleXMLElement Object ( [0] => 0.5206 ) SimpleXMLElement Object ( [0] => 93.31 )
Avatar billede da_kbaz Nybegynder
15. november 2004 - 02:29 #8
Så fik jeg sgu løst problemet!! :D

<?php

function getCurrency() {

  // XML sti
  $sXML = file_get_contents("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");

  // hent strengen ind i XML parseren
  $oXML = simplexml_load_string($sXML);


  // Definer ValutaArray
  $CurrencyArray = array();

  // Loop igennem data
  foreach($oXML->dailyrates->currency as $currency) {

    // Definer/Nulstil tempArray
    $TempArray = array();

    // Hvilken valuta er vi igang med at behandle?
    $CurrentCurrency = (string) $currency['code'];

    // Smid data i TempArray
    $TempArray['code'] = (string) $currency['code'];
    $TempArray['rate'] = ((string) $currency['rate']/100);
    $TempArray['desc'] = (string) $currency['desc'];

    // Put data ind i det rigtige array
    $CurrencyArray[$CurrentCurrency] = $TempArray;

  }


  // Sorter
  array_multisort($CurrencyArray, SORT_ASC);

  // returner valutaværdier
  return($CurrencyArray);

}

?>
  <select id="Currency">
  <option value="1" selected="selected">DKK - Danske kroner</option>
  <?php

    // Kør hent-valuta funktion
    $Currency = getCurrency();

    // loop igennem valuta og skab select boks
    foreach($Currency as $key=>$val) {
    echo "<option value=\"".$val['rate']."\">".$val['code']." - ".$val['desc']."</option>\n  ";
    }

  ?>
  </select>

Tak for hjælpen!
Avatar billede da_kbaz Nybegynder
15. november 2004 - 02:29 #9
Og smid lige et svar- Det dig der fik mig på rette spor ;-)
Avatar billede olebole Juniormester
15. november 2004 - 03:09 #10
Jamen, det var da godt ... jeg må se at få installeret en 5'er  :)
Når nu du i øvrigt besværer dig med at definere '$CurrentCurrency', kan du jo også ligeså godt bruge den til noget  ;o)

    $CurrentCurrency = (string) $currency['code'];

    // Smid data i TempArray
    $TempArray['code'] = $CurrentCurrency;
Avatar billede da_kbaz Nybegynder
15. november 2004 - 12:14 #11
Åhr, brugte den da også her ;-)

// Put data ind i det rigtige array
$CurrencyArray[$CurrentCurrency] = $TempArray;

Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester