Avatar billede morpheus Nybegynder
03. maj 2005 - 00:40 Der er 3 kommentarer og
1 løsning

Parse XML fil til array

Jeg sidder og vil parse et XML dokument: http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml.
Jeg vil gerne have det ned i et array: [CODE] => [RATE]

Hvordan kan jeg gøre det? Har kigget på SimpleXML, men har ikke helt fundet svaret.

Håber nogen kan vise mig vejen.
Avatar billede Slettet bruger
03. maj 2005 - 01:02 #1
Jeg vil gerne understrege at dette er en kommentar, da jeg ikke selv har arbejdet meget med det :) - men hvis du vil have lidt hjælp til selvhjælp, er jeg ret sikker på at du skal kigge på XSLT:

http://dk.php.net/xslt

--
pacroon
Avatar billede morpheus Nybegynder
03. maj 2005 - 01:14 #2
Fandt noget kode, skrevet af Detox, her på Eksperten.
Det gav så følgende resultat:

<?php
$file = "http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml";
$curArray = array();
$curCode = array();
$curRate = array();
function startElement($parser, $name, $attrs) {
    if ($name == 'CURRENCY') {
        global $curArray;
        global $curCode;
        global $curRate;
        array_push($curCode, $attrs['CODE']);
        array_push($curRate, $attrs['RATE']);
        $curArray = array_combine($curCode,$curRate);
    }
}
function endElement($parser, $name) {
    print "";
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        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);
print "<pre>";
print_r($curArray);
?>
Avatar billede Slettet bruger
03. maj 2005 - 01:14 #3
Ved nærmere eftertanke kan det godt være det ikke er den vej du vil gå. Med sådan en mindre side er det nok nemmest bare at tage den linje for linje.

Hvis du bruger en funktion som denne:

$site = file_get_contents("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
preg_match("/<currency code="EUR" desc=\s(.+)/>/is", $site $EUR);
echo $EUR;

Tror jeg du vil fange det i mellem <currency code="EUR" og />

Det er måske en hjælp :)

--
pacroon
Avatar billede Slettet bruger
03. maj 2005 - 01:14 #4
Nå okay, du fandt det selv :) Held og lykke med det!
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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