Einfache XML Generierung in C#

Im folgenden Artikel wird beschrieben, wie mit Visual Studio und C# die bereits im vorherigen Technical Tip erstellten Klassen so angepasst werden können, dass mit diesen eine XML Datei erstellt werden kann. Dies wird mithilfe von Attributen und den zur Verfügung gestellten Serializern durchgeführt.

1. Einführung

Wenn mit der SOLIDWORKS oder PDM API gearbeitet wird, werden viele Daten verarbeitet und verändert. Oft kommt es vor, dass diese Daten auch untereinander ausgetauscht werden sollen. Hierfür wird oft eine alte, aber noch immer gängige Lösung verwendet. Dies nennt sich „Extensible Markup Language“ oder kurz XML. Was genau dies ist und wie diese erstellt wird, soll in diesem TecTip erklärt werden.

2. Was ist eine XML?

XML ist eine Sprache, die nicht dazu dient Dinge auszuführen wie bei einer Programmier- oder Skriptsprache, sondern Dinge beschreibt. Sie ist ähnlich aufgebaut wie HTML, wird jedoch nur dafür benötigt Daten zu transportieren, anstatt diese anzuzeigen. Daten werden in sogenannten Tags definiert. Wie diese Tags aussehen, kann vom Benutzer selbst definiert werden.

In Abbildung 1 ist ein Beispiel einer XML Datei zu sehen. Ein XML Element besteht immer aus zwei Tags:

  1. Öffnungstag: immer umgeben von spitzen Klammern
  2. Schliesstag: besitzt immer einen vorangehenden Schrägstrich

Eine XML Datei besitzt immer genau ein Hauptelement und darf nicht mehrere hiervon enthalten.

In diesem Beispiel ist dies das Element „House“. Ein Element kann ebenfalls Unterelemente besitzen; hier „Windows“, „Door“ und „People“. Diese können ebenfalls weitere Unterelemente haben. Dies kann beliebig erweitert werden. Zusätzlich können diese Elemente auch Attribute besitzen. Im gezeigten Beispiel ist es “Count” für die Anzahl der Fenster und Menschen sowie der “Name” um die Personen zu identifizieren. Die Daten, die also nun übergeben werden sind:

ein Haus mit zwei Fenstern, einer Tür sowie drei Personen, welche die Namen Bernd, Lisa und Klaus haben.

Abbildung 1: Beispiel XML

Eine solche Datei soll nun mit C# und der bereits im vorherigen TecTip erstellten Klassen erstellt werden.

3. Klassen anpassen

Um eine XML Datei zu erzeugen, ist es wichtig, dass eine Klasse Eigenschaften mit dem Modifier „public“ enthält. Die Klasse selbst muss ebenfalls auf public gesetzt werden. Zusätzlich muss die Klasse immer einen Konstruktor besitzen, welcher keine Parameter benötigt. Damit diese Klassen auch serialisiert werden können, muss jede Klasse auch das Attribut „[serializable]“ besitzen. Dies wird in der Zeile über der Klasse geschrieben.

Passen Sie hierzu zuerst die Datei SolidworksFile an, sodass jede Dateiart bestimmte Eigenschaften aufweist. Hier könnte beispielsweise die Eigenschaft “Dateiname” eingefügt und die bestehende Eigenschaft “Dateipfad” mit dem public Modifier versehen werden. Der Eigenschaft im Konstruktor muss ebenfalls ein Wert zugewiesen werden. Hierfür wird die Methode GetFileName von der zur Verfügung stehenden System-Bibliothek verwendet. Dies ist in Abbildung 2 ersichtlich.

Abbildung 2: Eigenschaften der Dateien

Nun müssen wir in der Datei AssemblyFile.cs eine Liste von PartFiles hinzufügen, da eine Baugruppe aus Teilen besteht und nur so eine Zuweisung durchgeführt werden kann. Diesen Vorgang können Sie sich in Abbildung 3 näher ansehen. Denken Sie hier ebenfalls daran die Klasse auf public zu setzen. Darüber hinaus benötigt diese Klasse auch einen leeren Konstruktor.

Abbildung 3: Liste von Teilen einer Baugruppe

Abschliessend muss noch die PartFile.cs angepasst werden. Hier wird die Klasse nur auf public gesetzt und ein leerer Konstruktor erzeugt. Abbildung 4 zeigt dies nochmals.

Abbildung 4: Anpassung der Teile-Datei

Das Attribut “serializable” kann zwar in den Klassen AssemblyFile und Part-File gesetzt werden, wird hier jedoch nicht benötigt, da dies von der Klasse SolidworksFile vererbt wird. Würde keine Vererbung stattfinden, muss das Attribut in jeder Klasse gesetzt werden.

4. Serializer

Um diese Klassen nun zu serialisieren, benötigt es zwei System-Bibliotheken. Hierfür werden zwei “Usings” verwendet:

  • using IO;
  • using Xml.Serialization;

Hierzu wird z.B. eine Methode in der Form1.cs Datei erstellt. Als Parameter nimmt sie ein Objekt entgegen, welches in diesem Beispiel das AssemblyFile ist. Die Methode benötigt ebenfalls einen Pfad, um zu wissen, wo die Datei gespeichert werden soll.

Als Erstes muss eine Datei erstellt werden bzw. es muss ein Stream geöffnet werden. Hierzu wird das Objekt StreamWriter benötigt. Als Parameter für dieses Objekt wird der Dateipfad angegeben und ob dieser an die Datei anfügen werden soll oder nicht. In diesem Fall soll die Datei jedoch immer neu aufgebaut werden.

Anschliessend wird der XML Serializer benötigt. Hierfür wird ebenfalls ein Objekt initialisiert und als Parameter wird der zu serialisierende Typ benötigt. Zum Schluss kann mit Hilfe der Methode “Serialize” des XML Serializers die serialisierte Klasse in die Datei gespeichert werden. Diese Methode ist in Abbildung 5 zu sehen.

Abbildung 5: Erstellen der Methode zum Serialisieren

5. Erstellen der XML

Um nun mit dem programmierten Code eine XML Datei erzeugen zu können, werden Testdaten benötigt. Hierzu wurde eine Baugruppe mit 4 enthaltenen Parts erzeugt: es wird ein Objekt AssemblyFile erzeugt und der Liste werden neue Instanzen des Objekts PartFile hinzugefügt. Wie dies gemacht wird, ist in Abbildung 6 ersichtlich.

Abbildung 6: Erstellen einer XML Datei

Wenn diese nun ausgeführt wird, dann wird im angegeben Ordner eine XML Datei abgespeichert. Diese sollte aussehen wie in folgender  Abbildung:

Abbildung 7: Erstellte XML Datei

Diese besteht aus dem Hauptelement AssemblyFile und besitzt die zwei Eigenschaften als Unterelemente: FileName sowie Filepath. Die Liste PartFiles ist ebenfalls ein Unterelement und hat wiederum die PartFile als Unterelemente.

Dies kann auch später nochmals angepasst werden. Sollen Dateiname und Dateipfad jedoch eher Attribute sein, kann die SolidworksFile Datei angepasst werden und das Attribut „[XmlAttribute]“ über die beiden Eigenschaften  geschrieben werden, wie in Abbildung 8 deutlich wird:

Abbildung 8: XML Attribute in SolidworksFile

Anschliessend sieht die XML Datei aus, wie in Abbildung 9. Hier sind nun die Eigenschaften als Attribut ersichtlich.

Abbildung 9: XMl Datei mit Attributen

6. Fazit

Der XMLSerializer von Windows ist ein sehr mächtiges und einfach zu bedienendes Tool. Es können ganz einfach alle möglichen definierten Klassen in eine XML Datei gespeichert und ausgetauscht werden. Es kann ebenfalls definiert werden, wie die XML Datei aussehen soll und ob Eigenschaften als Elemente oder Attribute dargestellt werden sollen. Man kann definieren, ob Eigenschaften serialisiert werden sollen oder auch nicht. Da XML eine weitverbreitete Methode zum austauschen von Daten ist, ist der XMLSerializer ein hervorragendes Tool, was jeder kennen sollte. ?

Wir hoffen sehr, dass Ihnen dieser Technical Tip dabei hilft mit Visual Studio und C# erstellte Klassen so anzupassen, dass mit diesen eine XML Datei erstellt werden kann.

  • Wie hilfreich sind diese Technical Tips für Sie im Alltag?
  • Haben Sie Vorschläge für einen Technical Tip?

 

Teilen Sie Ihre Erfahrungen mit uns: am besten als Kommentar, hier oder auf unserer LinkedIn-Seite.

Autor des Artikels

Martin Bartolomé, R&D Developer bei Visiativ Solutions Switzerland

Sie möchten keine News aus der CAD-Welt mehr verpassen?

Mit unserem Newsletter bleiben Sie auf dem Laufenden: Produktneuheiten, Tipps und Tricks, Anleitungen, Erfahrungsberichte, Erfolgsgeschichten, Fotos, Veranstaltungsberichte und vieles mehr.

Bleiben Sie informiert und abonnieren Sie unseren Newsletter: