Avatar billede hanibald Mester
25. februar 2015 - 22:28 Der er 4 kommentarer og
1 løsning

PHP - indlæs ekstern XML-fil

Jeg har behov for et php-program, der kan udtrække data fra eksterne XML-filer - aktuelt daglige valutakurser fra Nationalbanken: http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da).

Når jeg trækker print_r med denne kode:
------
    $rod = simplexml_load_file ('http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da');
    echo "<pre>";
    print_r($rod);
    echo "</pre>";   
------
får jeg denne oversigt:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [type] => Valutakurser
            [author] => Danmarks Nationalbank
            [refcur] => DKK
            [refamt] => 1
        )

    [dailyrates] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 2015-02-24
                )

            [currency] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [code] => AUD
                                    [desc] => Australske dollar
                                    [rate] => 510,61
                                )

                        )

                    [1] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [code] => BGN
                                    [desc] => Bulgarske lev
                                    [rate] => 381,40
                                )

                        )

...
...
...

                    [32] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [code] => ZAR
                                    [desc] => Sydafrikanske rand
                                    [rate] => 56,73
                                )

                        )

                )

        )

)



Jeg påregner, at programmet kan opbygges efter følgende koncept:
------
    $rod = simplexml_load_file ('http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da');
    foreach()
    {
        if('dailyrates' == kode, der læser 'dailyrates' i filen)
        {
        $id = kode, der læser datoen;
        echo $id . "<br />";
        }

        if ('[0)-[xxx]' == kode, der enkeltvis læser identerne 0-xxx i filen).
        {
        $code = kode, der læser valutaens kortnavn;
        $desc = kode, der læser valutaens navn;
        $rate = kode, der læser valutaens kurs;
        echo $code . $desc . $rate . "<br />";
        }
    }
------
Når dataene er trukket ud af filen, har jeg ingen problemer med at bruge dem i et videre forløb.

Håber, der findes en løsning

hanibald
Avatar billede arne_v Ekspert
25. februar 2015 - 22:34 #1
Dataene er allerede trukket ud i en PHP data struktur - du skal bare gaa ned fra $rod.
Avatar billede garrett Seniormester
26. februar 2015 - 10:30 #2
Du kan løbe gennem de forskellige valuta på flg. måde:
<?php
    $rod = simplexml_load_file("http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da");
    foreach ($rod->dailyrates->currency as $curr) {
        echo $curr->attributes()->code ."\t" . $curr->attributes()->rate ."\n";
    }
?>

Her udskrives blot valutakoden og kursen som et eksempel.
Avatar billede hanibald Mester
26. februar 2015 - 21:20 #3
Til garrett

Nu kan jeg ikke alene udtrække de tre identer pr valuta. Jeg kan også udtrække datoen.
Og det bedste af det hele: Ved indlejring kan jeg i et gennemløb udtrække både datoen og alle tre identer for hver valuta.
Jeg går ud fra, at jeg nu kan udtrække data fra en XML-fil, uanset hvor kompleks den er, blot den overholder den strukturelle opbygning.

Tusind tak.

Nu er det vist tid til et svar!!!
Avatar billede garrett Seniormester
27. februar 2015 - 08:54 #4
Du beholder bare selv pointene :)

Hvis du har mod på at grave lidt mere i php'x simplexml implementering så kan du laver lidt mere sjov v.h.a. xpath queries mod din XML.:

<?php
    $xml = simplexml_load_file("http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=en");
    $expensive = $xml->xpath("/exchangerates/dailyrates/currency[@rate > 500]");
    foreach ($expensive as $rate) {
        echo $rate->attributes()->code ."\t" . $rate->attributes()->rate ."\n";
    }
?>

Her får du så kun returneret de valuta der har en kurs over 500 som eksempel :)
Bemærk jeg har ændre "lang=da" til "lang=en" i URL til XML'en, ellers får man kursen i dansk talformat.
Avatar billede hanibald Mester
03. marts 2015 - 22:08 #5
Tak
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

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