søndag den 28. april 2013

Læse og skrive XML via XmlDocument C#

Der er en flere forskellige tilgange til arbejde med XML i C#. .NET stiller en række klasser til rådighed til at læse og skrive XML. En simpel metode jeg vil vise i dette eksempel er at XmlDocument fra System.Xml namespace.
Med XmlDocument arbejder man med et helt XML dokument i hukommelsen, det er derfor ikke ideelt at bruge XmlDocument til meget store XML filer. Ved store filer kan klasserne XmlTextReader og XmlTextWriter anvendes, de arbejder element for element.

Eksempel 1.


            XmlDocument doc = new XmlDocument();

            XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);

            doc.AppendChild(declaration);

            XmlElement cmsElement = doc.CreateElement("", "cms", "");

            doc.AppendChild(cmsElement);

            XmlElement sprogElement = doc.CreateElement("", "sprog", "");

            cmsElement.AppendChild(sprogElement);

            XmlText sprogTekst = doc.CreateTextNode("dansk");

            sprogElement.AppendChild(sprogTekst);

            XmlElement domæneElement = doc.CreateElement("", "domæne", "");

            cmsElement.AppendChild(domæneElement);

            XmlText domæneTekst = doc.CreateTextNode("eksempel.dk");

            domæneElement.AppendChild(domæneTekst);

            XmlElement mappeElement = doc.CreateElement("", "mappe", "");

            cmsElement.AppendChild(mappeElement);

            XmlText mappeTekst = doc.CreateTextNode("min mappe");

            mappeElement.AppendChild(mappeTekst);

         doc.Save("c:/filer/gemher.xml");




Resultatet af koden er filen gemher.xml i mappen filer på c drev

Hvis filen åbnes med f.eks visual studio ser indhold således ud:

<?xml version="1.0" encoding="utf-8"?>
<cms>
  <sprog>dansk</sprog>
  <domæne>eksempel.dk</domæne>
  <mappe>min mappe</mappe>
</cms>

Instance metoden CreateXmlDeclaration danner dekleration til XML filen
Instance metoden AppendChild tilføjer element
Instance metoden CreateElement danner nyt element
Instance metoden Save gemmer XML fil
XmlDeclaration klassen repræsenterer en XML dekleration
XmlElement klassen repræsenterer et element
XmlText klassen repræsenterer en tekst


Forklaring:


XmlDocument doc = new XmlDocument();
Opretter nyt XmlDocument objekt doc

XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
Opretter XmlDeclaration objekt declaration

doc.AppendChild(declaration);
Tilføjer declaration til XmlDocument doc


XmlElement cmsElement = doc.CreateElement("", "cms", "");
Opretter XmlElement objekt cmsElement dette element hedder cms i XML fil

doc.AppendChild(cmsElement);
Tilføjer cms til XmlDocument doc, dette bliver rod element i dokumentet

XmlElement sprogElement = doc.CreateElement("", "sprog", "");
Opretter XmlElement objekt sprogElement dette element hedder sprog i XML fil

cmsElement.AppendChild(sprogElement);
Tilføjer sprog som child til cms

.
.
.
Øvrige elementer tilføjes som child til rod element cms
.
.
.
doc.Save("c:/filer/gemher.xml");
Gemmer XmlDocument doc som xml fil på placering "c:/filer/gemher.xml"

XmlDocument sørger for formattering, som eks. at afslutte elementer.

Bemærk!
Der findes en anden klasse i .NET version 3.0 og derover XDocument der yderligere forenkler arbejdet med XML.

tirsdag den 23. april 2013

Mellemrum til komma streng C#



Her er et simpelt eksempel på dannelse af en komma separeret streng ved brug af c#

Eks1.


string ind = "Lav mig til en komma separeret streng og fjern dubletter dubletter";
string ud = string.Join(",", ind.Split(' ').Distinct().ToArray());


input.Split laver array af strenge, delt på mellemrum.
.Distinct() fjerner dubletter
string.Join samler array til streng, hvor hvert element adskilles af komma

ud inderholder herefter strengen:

"Lav,mig,til,en,komma,separeret,streng,og,fjern,dubletter"

Velkommen til C# .NET Noter

Denne blog vil jeg benytte som en slags note to self, alle kan læse med på. Jeg vil løbende poste om C#, .NET og relaterede emner, jeg føler de er interessante. Ofte vil dette ske efterhånden som jeg tilegner mig viden om emnet. 
Andre emner som HTML, HTML5 mm. vil også blive behandlet.
Bloggen her er ikke nødvendigvis lavet fordi jeg har en masse viden jeg vil formidle, men i lige så høj grad for at have et sted at notere tilegnet viden, inden jeg glemmer den igen :)