Avatar billede ircnoob Nybegynder
01. oktober 2006 - 13:03 Der er 25 kommentarer og
1 løsning

Problemer med at loade XML på nettet

Hej,
har fået det til at snurre med at vise et xml dokument i et datagrid når jeg kører lokalt og bruger fx stien c:\minxml.xml ...


Men når jeg så ligger det online så går den gal
"
[HttpException (0x80004005): 'http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml' is not a valid virtual path.]
"
//Sårn  ser det ud
FileStream fs = new FileStream(Server.MapPath("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml"), FileMode.Open);
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 14:07 #1
Hvis jeg skriver fx FileStream fs = new FileStream(Server.MapPath("App_Data/valuta.xml"), FileMode.Open);  i stedet får jeg nedenstående..

UnauthorizedAccessException: Access to the path 'E:\inetpub\vhosts\mitwebsite.dk\httpdocs\App_Data\valuta.xml' is denied.]
Avatar billede dr_chaos Nybegynder
01. oktober 2006 - 15:26 #2
brug
xmldocument xd = new xmldocument();

xd.load("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 16:48 #3
Æh jow nu virkede det andet jo ellers så fint lokalt ?

Men dette kan jeg ikke lige få til at fungere, hvad er  problemet.. ? "[FormatException: Input string was not in a correct format.]" ved            newValuta.Rate = decimal.Parse(element.GetAttribute("Rate"));

----------

XmlDocument xd = new XmlDocument();
     
        xd.Load("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");

      //Create a generic collection of products
        List<Valuta> valutaer = new List<Valuta>();

        foreach (XmlElement element in xd.DocumentElement.ChildNodes)
        {
            Valuta newValuta = new Valuta();           
            newValuta.Code = element.GetAttribute("Code");
            newValuta.Desc = element.GetAttribute("Desc");
            newValuta.Rate = decimal.Parse(element.GetAttribute("Rate"));

            valutaer.Add(newValuta);
        }
        XMLDataGrid.DataSource = valutaer;
        XMLDataGrid.DataBind();
Avatar billede dr_chaos Nybegynder
01. oktober 2006 - 17:11 #4
problemet er at tallet står
1.110,00
Du skal formodentlig replace "." med et "" før du parser.
Avatar billede dr_chaos Nybegynder
01. oktober 2006 - 17:13 #5
du kan måske bruge:
FileStream fs = new FileStream("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml", FileMode.Open);
Men det andet er kønnere og ikke specielt langsommere.
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 17:54 #6
Det er jo ens med det jeg selv havde ?
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 17:55 #7
Hvorn dælen kan jeg få replaced , med ""  :) ?  men lyder korrekt ja :)
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 18:03 #8
Line 34:            string str = element.GetAttribute("Rate");
Line 35:            string str2 = str.Replace(',', ' ');
Line 36:            newValuta.Rate = decimal.Parse(str2);

sårn vil den desværre stadig ikke parse det.. :/
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 18:13 #9
Tja har prøvet bare for at teste og lavet den til string .. Men der er nada data i ?
Avatar billede dr_chaos Nybegynder
01. oktober 2006 - 18:32 #10
prøv at udskrive de enkelte elementer for at se om der er noget i dem.
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 19:31 #11
Tja ser jo som forventet ikke ud til at der er det .. men er da stortset identisk kode så det forstår jeg ikke ?? Den gamle kode nedenunder virkede fint..  bortset fra det fkatisk at den ikke gad virke med et online xml document..
//FileStream fs = new FileStream(Request.PhysicalApplicationPath + @"valuta.xml", FileMode.Open);
        //XmlTextReader r = new XmlTextReader(fs);
      //while (r.Read())
        //if (r.NodeType == XmlNodeType.Element && r.Name == "currency")
        //    {
        //        Valuta newValuta = new Valuta();
        //        newValuta.Code = r.GetAttribute(0);
        //        newValuta.Desc = r.GetAttribute(1);
        //        newValuta.Rate = decimal.Parse(r.GetAttribute(2));
XMLDataGrid.DataSource = valutaer;
        XMLDataGrid.DataBind();

        //        valutaer.Add(newValuta);
        //    }
Avatar billede dr_chaos Nybegynder
01. oktober 2006 - 20:39 #12
prøv med


        foreach (XmlNode xn in xd.SelectSinglenode("//exchangerates/dailyrates").ChildNodes)
        {
Response.write(Xn.GetAttribute("Code"));
            /*Valuta newValuta = new Valuta();         
            newValuta.Code = element.GetAttribute("Code");
            newValuta.Desc = element.GetAttribute("Desc");
            newValuta.Rate = decimal.Parse(element.GetAttribute("Rate"));

            valutaer.Add(newValuta);*/
        }


Kan ikke lige huske om der er en innertext på attributter.

Du kan altid tjekke din xpath query med
xd.SelectSinglenode("//exchangerates/dailyrates").HasChildNodes .
PÅ den måde kan man test om man henter det rigtige.
Avatar billede ircnoob Nybegynder
01. oktober 2006 - 20:48 #13
Kan ikke tage attribut på xmlnode...
Avatar billede dr_chaos Nybegynder
02. oktober 2006 - 13:19 #14
Prøv lige med
foreach (XmlElement xn in xd.SelectSinglenode("//exchangerates/dailyrates").ChildNodes)
        {
Response.write(Xn.GetAttribute("Code"));
            /*Valuta newValuta = new Valuta();       
            newValuta.Code = element.GetAttribute("Code");
            newValuta.Desc = element.GetAttribute("Desc");
            newValuta.Rate = decimal.Parse(element.GetAttribute("Rate"));

            valutaer.Add(newValuta);*/
        }
Avatar billede dr_chaos Nybegynder
02. oktober 2006 - 13:23 #15
eller cast XmlNode xn til et xmlelement med
xmlelement xe = (xmlelement)xn;
Avatar billede ircnoob Nybegynder
02. oktober 2006 - 13:53 #16
Hej,
det ser mere rigtigt ud :) :)  .. Den printer godt nok ingen data ud.. Men sjovt nok så kan jeg da få den til at sige, at hvis jeg for hvert element i arraylisten printer fx "value x" ud så printer den en ordentlig stak ud .. Og nu generer den da også et datagrid med en masse felter... bare uden indhold :) 

flere gode ideer :D ?
Avatar billede ircnoob Nybegynder
02. oktober 2006 - 19:16 #17
Tja er nedenstående ok hehe.. virker men er det fjollet ? Jeg får dog også kolonnen "    dailyrates_Id" med her som jeg ikke lige ønskede med.. hvorn kan jeg undgå det :) ?

XmlDocument doc = new XmlDocument();
            doc.Load(Server.MapPath("xml/valuta.xml"));
            XmlNodeReader reader = new XmlNodeReader(doc);
            DataSet ds = new DataSet();
            ds.ReadXml(reader);
            reader.Close();
            XMLDataGrid.DataSource = ds.Tables["currency"].DefaultView;
            XMLDataGrid.DataBind();
Avatar billede ircnoob Nybegynder
02. oktober 2006 - 19:19 #18
bøh ja og skulle jo også gerne have oprettet dem som objecter som tidligere
Avatar billede ircnoob Nybegynder
02. oktober 2006 - 19:37 #19
Ok her er sårn som det endte til evt interesserede.. fyr et svar som et beskeden tak chaos :)


XmlDocument doc = new XmlDocument();
            doc.Load(Server.MapPath("xml/valuta.xml"));
            XmlNodeReader reader = new XmlNodeReader(doc);

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "currency")
                {
                    Valuta newValuta = new Valuta();
                    newValuta.Code = reader.GetAttribute(0);
                    newValuta.Desc = reader.GetAttribute(1);
                    newValuta.Rate = reader.GetAttribute(2);

                    Response.Write(reader.GetAttribute("Code"));
                    Debug.Write(reader.GetAttribute("Code"));

                    valutaer.Add(newValuta);
                }
            }
            reader.Close();       

            GridView1.DataSource = valutaer;
            GridView1.DataBind();
Avatar billede ircnoob Nybegynder
02. oktober 2006 - 19:46 #20
Well mangler stadig svar på et lille problem .. Denne loader jo kun fra min egen side.. ville jo være bedre at den hentede fra http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml selv.. men den giver den fejl med at det ikke er et virktual host ?
Avatar billede dr_chaos Nybegynder
03. oktober 2006 - 08:50 #21
Det ville være meget bedre.
Her er noget kode jeg har lavet som virker(tidligere var bare noget jeg skrev herinde og der var nogle stavefejl :))
XmlDocument xd = new XmlDocument();
        xd.Load("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
        foreach (XmlNode xn in xd.SelectSingleNode("//exchangerates/dailyrates").ChildNodes)
        {
            Valuta newValuta = new Valuta();
            newValuta.Code = xn.Attributes["code"].Value;
            newValuta.Desc = xn.Attributes["desc"].Value;
            newValuta.Rate = decimal.Parse(xn.Attributes["rate"].Value);
            valutaer.Add(newValuta);
        }
Avatar billede dr_chaos Nybegynder
03. oktober 2006 - 08:55 #22
P.s. undskyld lange svar tider.
Men havde travlt på arbejde :)
Avatar billede ircnoob Nybegynder
03. oktober 2006 - 10:10 #23
hehe kanon tark igen .. og kom så med det svar :p
weee :d
Avatar billede dr_chaos Nybegynder
03. oktober 2006 - 10:18 #24
javel :)
Avatar billede ircnoob Nybegynder
03. oktober 2006 - 18:47 #25
wuuuuuuuuu
Avatar billede dr_chaos Nybegynder
03. oktober 2006 - 18:55 #26
jeg er så enig.
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