HowTo: XML erstellen mit XmlAttributes

Es gibt viele Möglichkeiten ein XML mit .NET zu erstellen. Eine sehr praktische und schnelle Möglichkeit ist die XmlAttributes-Variante zu verwenden.
Oft hat man schon ein Objektmodell das man als XML ausgeben oder eine XML Datei die man in sein Objektmodell einlesen möchte. Für diese Aufgaben ist der XmlSerializer ideal.

Ein einfaches Schreiben:

 XmlSerializer _xmlGen = new XmlSerializer(typeof(string));
            _xmlGen.Serialize(Console.Out,"www.code-inside.de");

 

Erklärung: Wir serializieren hier einfach den String www.code-inside.de auf der Console und schauen uns an was passiert:

image

So wird es auf der Kommandozeile ausgegeben.

Ein einfaches Lesen:

XmlSerializer _xmlGen = new XmlSerializer(typeof(string));
            Console.WriteLine(
                _xmlGen.Deserialize(
                       new StringReader("<string>www.Code-Inside.de</string>")));

Erklärung: Diesmal wollen wir einfach unser XmlTag (mit dem Code-Inside.de), was rein theoretisch z.B. in einer Datei stehen könnte) wieder lesen.

image

Da ist wieder unser ursprünglicher String ;)

 

Man kann natürlich nicht nur Strings serialisieren, sondern auch komplexere Objekte.
Wichtig: Diese Klassen müssen dann “public” sein und einen leeren Konstruktor haben.

Wenn man Objekte serialisiert dann werden die Elemente im XML nach dem Variablennamen oder dem Datentypen des serialisierten Objektes benannt, weil dies aber nur selten sinnvoll ist, gibt es die Möglichkeit die Ausgabe über Attribute zu steuern.
Eine Liste der XmlAttribute findet sich natürlich auf der MSDN.

Klassenstruktur für unser Beispielprojekt:

image

(auch wenn Oliver, welcher den Artikel vorbereitet & zum großen Teil geschrieben hat, das alles in die Program.cs mit reinschreiben wollte ;) )

Der Code ist einfach gehalten. Über den einzelnen Eigenschaften wurde, wie z.B. beim Title des BlogEntry, das XmlAttribute gesetzt:

        [XmlElement("title")]
        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }

Sowie über den Klassennamen des BlogEntrys das XmlRootAttribute:

[XmlRootAttribute("BlogEntry")]
    public class BlogEntry

Das Schreiben wurde ähnlich Implementiert wie bei dem simplen Beispiel:

 BlogEntry _myBlogEntry = new BlogEntry();
      _myBlogEntry._title = "XML erstellen mit XmlAttributes";
      _myBlogEntry._content = "Es gibt viele Möglichkeiten...";
      for (int i = 0; i < 2; i++)
      {
         _myBlogEntry._comments.Add(new BlogComment("Paul","Cooole Sache"));
         _myBlogEntry._comments[i]._comments.Add(new BlogComment("Tim", "Finde ich auch Paul"));
      }
      _xmlGen.Serialize(Console.Out, _myBlogEntry);

Wir erstellen ein Blogeintrag und hängen noch ein paar Blogkommentare dran und schreiben das auf die Konsole. In unserer Demoanwendung später, werden wir dies allerdings in eine Datei speichern, welche im bin Verzeichnis zu finden ist..

Das resultierende Xml daraus:

<?xml version="1.0" encoding="UTF-8"?>
<BlogEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http ://www.w3.org/2001/XMLSchema">
  <Title>XML erstellen mit XmlAttributes</Title>
  <content>Es gibt viele Möglichkeiten...</content>
  <comments name="Paul">
    <content>Cooole Sache</content>
    <comments name="Tim">
      <content>Finde ich auch Paul</content>
    </comments>
  </comments>
  <comments name="Paul">
    <content>Cooole Sache</content>
    <comments name="Tim">
      <content>Finde ich auch Paul</content>
    </comments>
  </comments>
</BlogEntry>

Das Lesen erfolgt ähnlich wie bereits oben erwähnt. In der Demoanwendung sieht das Ergebniss beim Ausführen so aus:

image

 

Fazit: MIt dem XmlSerializer und XmlAttributes lassen sich auch komplexe XML Dateien sehr schnell, einfach und übersichtlich lesen und schreiben, besonders bei rekursiven Strukturen zeigen sich deutliche Vorteile gegenüber dem XmlTextWriter.

[ Download Democode ]


Kick It auf dotnet-kicks.de
Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by Robert Mühsig

Robert Mühsig (@robert0muehsig) ist Webentwickler und beschäftigt sich mit Web-Frameworks (vor allem dem ASP.NET MVC Framework) und scheut sich auch nicht vor Javascript. Ansonsten bloggt er über all jene Probleme, die ihm über den Weg laufen. Seit 2008 ist er Microsoft MVP für ASP.NET und er arbeitet bei der T-Systems Multimedia Solutions GmbH in Dresden. Treffen kann man ihn online via Twitter (@robert0muehsig) oder dieser Seite oder bei der .NET User Group Dresden.

One Response

Comment on this post

Letzte Posts

  • image.png
    RavenHQ–RavenDB in der Cloud

    Ayende Rahien hat es heute verkündet – RavenHQ, der RavenDB Cloud Hoster (natürlich von und mit Ayende) ist ab heute raus aus der Beta und man kann es von überall aus nutzen. In der Betaphase waren nur Nutzer von AppHarbor zugelassen. Was ist RavenHQ? RavenHQ ist im Grunde ein gehostes RavenDB in den Rechenzentren von ...

  • image.png
    GitHub for Windows–erste Eindrücke

    Git ist schon eine tolle Sachen und eröffnet viele neue Möglichkeiten – allerdings ist der Einstieg recht hart und selbst wenn man die guten Hilfsanleitungen auf GitHub befolgt, kommt man am Anfang nur langsam vorwärt. Insbesondere ist das Tooling für Windows / .NET Entwickler auch nicht gerade “bekanntes Terrain”. GitHub to the rescue! Die GitHub ...

  • image.png
    Chocolatey–apt-get für Windows

    Durch Zufall bin ich auf das Tool “Chocolatey” gestoßen. Wer die Website sich anschaut, wird evtl. eine Verwandschaft mit NuGet ausmachen. Was macht Chocolatey? Chocolatey ist ein “Maschine Package Manager”, das bedeutet, dass man für seine Maschine einfach Tools runterladen und Updaten kann – direkt über die Konsole. Was ist der Unterschied zu NuGet? NuGet ...

  • image.png
    SASS, LESS & Coffeescript in Visual Studio mit der Web Workbench

    CSS und Javascript sind die “kleinste” Schnittmenge von allen Browsern für die Erstellung von Web-Applikationen. Leider geht dabei etwas komfort verloren, daher lieben alle Webentwickler jQuery! SASS und LESS sind zwei Varianten, wie man “schöner” CSS schreiben kann und Coffeescript versucht Javascript Entwicklung zu vereinfachen. Aber immer der Reihe nach… Was ist SASS? SASS steht ...

  • image.png
    Code-Inside Sample nun auf GitHub: Google Code zu GitHub Migration

    Seit einiger Zeit habe ich Beispielcode auf Google Code bereitgestellt. Einfach nur noch weg von Google Code O-Ton damals war: Ich hatte mich für Google Code entschieden, weil ich hoffe dass früher oder später die Google Code Suche nutzbar ist und es dadurch wenigstens ein kleiner Mehrwert entsteht. Allerdings wirft es momentan noch ein Fehler. ...

Auf Amazon einkaufen & unterstützen

Facebook