Gå til innhold

XML - bruke variabel i stedet for Stream(Fil)


Anbefalte innlegg

Hei

 

For å laste inn et XML-dokument driver jeg nå med følgende idiotiske hendelsesforløp:

a) Hent XML-dokument fra internett (da får jeg det i en string-variabel)

b) Lagre variabelen til fil

c) Opprett en IO.StreamReader som leser filen

d) La XmlTextReaderen lese StreamReaderen.

e) Opprett en Xml.XmlDocument med navn "Dokument"

f) Dokument.Load([navnet på XmlTextReaderen]).

 

Er det mulig å forenkle dette, i det minste fjerne lagring og åpning av dokument, og heller laste stringen med XML-dokumentinnholdet direkt inn i XmlDocumentet?

 

 

Takk,

Degeim

Lenke til kommentar
Videoannonse
Annonse

XmlDocument.LoadXml(string xml) ?

 

Hvis du da gjør det slik:

 

XmlDocument xDoc = new XmlDocument();
using(System.Net.WebClient wc = new WebClient())
{
 xDoc.LoadXml(wc.DownloadString(url));
}

Endret av Manfred
Lenke til kommentar

Det fungerer ikke som en try-catch, nei. Men WebClient-objectet disposes etter at scopet er kjørt. Alternativet (som vil gi det samme resultatet) er dette:

 

System.Net.WebClient wc = new System.Net.WebClient();
xDoc.LoadXml(wc.DownloadString(url));
wc.Dispose();

 

Det er bare en god vane å bruke using for disposeable objekter som kun skal brukes i et begrenset scope :)

 

Er det fare for Exceptions i webrequesten (noe det alltid vil være) må man likevel legge en try-cath rundt, som kan fange opp feilene.

 

Så en forbedret kode av den jeg gav må vel bli:

 

XmlDocument xDoc = new XmlDocument();
try
{
 using(System.Net.WebClient wc = new WebClient())
 {
    xDoc.LoadXml(wc.DownloadString(url));
 }
}
catch(XmlException xexp)
{
 //Behandle feil i xml
}
catch(WebException wexp)
{
 //Behandle feil i web request
}

Endret av Manfred
Lenke til kommentar

Microsoft beskriver det på denne måten:

In other words, the using keyword simply maps to a try/finally construct that ensures the used object is always disposed. The code snippet just shown represents the typical expansion for the using keyword. You should note, however, that if a value type is used instead of a reference type, the compiler will not generate the check for a null value.

 

 

Så på en måte fungerer det som Try uten at du kan Catch'e en exception, der dispose blir kallt i finally blokken.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...