Avatar billede SommerFyr Seniormester
04. maj 2017 - 10:47 Der er 7 kommentarer og
2 løsninger

Get valutakurser v.2

Hej jeg er i gang med at lave et stykke kode til en hjemmeside og her er det mening at få valuta også om den er gåde op eller ned
og her bruger jeg så
http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesHistoryXML?lang=da

men xml er ikke min stærke side og derfor kan jeg ikke helt finde ud af at finde første dags og anden dags valuta
sådan at jeg kan se den er ænder..

Er der en venlig sjæl der kan hjælpe mig ?
Avatar billede arne_v Ekspert
04. maj 2017 - 18:49 #1
Til inspiration:


using System;
using System.Globalization;
using System.Xml;

namespace E
{
    public class Program
    {
        public static decimal GetRate(DateTime date, string currency)
        {
            string datestr = date.ToString("yyyy-MM-dd");
            XmlDocument doc = new XmlDocument();
            doc.Load("http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesHistoryXML?lang=da");
            XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
            xnm.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
            xnm.AddNamespace("default", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
            string ratestr = doc.SelectSingleNode("/gesmes:Envelope/default:Cube/default:Cube[@time='" + datestr + "']/default:Cube[@currency='" + currency + "']/@rate", xnm).Value;
            return decimal.Parse(ratestr,  new CultureInfo("da-DK", false));
        }
        public static void Main(string[] args)
        {
            Console.WriteLine(GetRate(DateTime.Now, "USD"));
            Console.WriteLine(GetRate(DateTime.Now.AddDays(-1), "USD"));
            Console.ReadKey();
        }
    }
}
Avatar billede SommerFyr Seniormester
04. maj 2017 - 19:14 #2
Jubii Tak Arne..
Det var lige hvad jeg skulle bruge.
Avatar billede SommerFyr Seniormester
04. maj 2017 - 19:17 #3
Arne..

Jeg kom til at tænke på hvad sker der hvis jeg beder om 6-5-2017 som de ikke lave opdatering på den næste vil være 8-5-2017..
Avatar billede arne_v Ekspert
04. maj 2017 - 19:29 #4
Der faar du nok en stor grim exception.

:-)

Den kan du catche.
Avatar billede arne_v Ekspert
04. maj 2017 - 19:32 #5
Alternativt kan du aendre lidt i koden og teste for null en masse steder.
Avatar billede SommerFyr Seniormester
04. maj 2017 - 19:39 #6
Er det ikke muligt at tage den første post
og her efter den anden
Avatar billede arne_v Ekspert
04. maj 2017 - 20:01 #7
Du kan jo kode det praecis ligesom du vil have det.

Variant:


using System;
using System.Collections.Generic;
using System.Globalization;
using System.Xml;

namespace E
{
    public class Program
    {
        private static readonly CultureInfo dadk = new CultureInfo("da-DK", false);
        public static List<decimal> GetRate(List<DateTime> date, string currency)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesHistoryXML?lang=da");
            XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
            xnm.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
            xnm.AddNamespace("default", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
            List<decimal> res = new List<decimal>();
            foreach(DateTime dt in date)
            {
                string datestr = dt.ToString("yyyy-MM-dd");
                string ratestr = doc.SelectSingleNode("/gesmes:Envelope/default:Cube/default:Cube[@time='" + datestr + "']/default:Cube[@currency='" + currency + "']/@rate", xnm).Value;
                res.Add(decimal.Parse(ratestr,  dadk));
            }
            return res;
        }
        public static void Main(string[] args)
        {
            foreach(decimal d in GetRate(new List<DateTime> { DateTime.Now, DateTime.Now.AddDays(-1) }, "USD"))
            {
                Console.WriteLine(d);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede SommerFyr Seniormester
04. maj 2017 - 20:22 #8
Ja det er også en mulighed men jeg vil gerne væk fra at indtaste dato men bare tage første og næste post.. sådan at jeg ikke får problemer med dato.
Avatar billede arne_v Ekspert
04. maj 2017 - 21:58 #9

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Xml;

namespace E
{
    public class Program
    {
        private static readonly CultureInfo dadk = new CultureInfo("da-DK", false);
        public static List<decimal> GetRate(int nodays, string currency)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesHistoryXML?lang=da");
            XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
            xnm.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
            xnm.AddNamespace("default", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
            List<decimal> res = new List<decimal>();
            for(int i = 0; i < nodays; i++)
            {
                string ratestr = doc.SelectSingleNode("/gesmes:Envelope/default:Cube/default:Cube[" + (i + 1) + "]/default:Cube[@currency='" + currency + "']/@rate", xnm).Value;
                res.Add(decimal.Parse(ratestr,  dadk));
            }
            return res;
        }
        public static void Main(string[] args)
        {
            foreach(decimal d in GetRate(2, "USD"))
            {
                Console.WriteLine(d);
            }
            Console.ReadKey();
        }
    }
}
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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