{"id":76975,"date":"2021-10-12T07:45:12","date_gmt":"2021-10-12T05:45:12","guid":{"rendered":"https:\/\/www.visiativ.ch\/blog\/einfache-xml-generierung-in-c\/"},"modified":"2024-04-08T11:44:27","modified_gmt":"2024-04-08T09:44:27","slug":"einfache-xml-generierung-in-c","status":"publish","type":"post","link":"https:\/\/www.visiativ.ch\/de\/blog\/einfache-xml-generierung-in-c\/","title":{"rendered":"Einfache XML Generierung in C#"},"content":{"rendered":"
\n
\n
\n

Im folgenden Artikel wird beschrieben, wie mit Visual Studio und C# die bereits im vorherigen Technical Tip<\/a> 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.<\/p>\n<\/div>\n

\n

1. Einführung<\/h2>\n
\n
\n
\n

Wenn mit der SOLIDWORKS<\/strong><\/a> oder PDM<\/strong><\/a> 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“<\/em> oder kurz XML. Was genau dies ist und wie diese erstellt wird, soll in diesem TecTip erklärt werden.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

\n

2. Was ist eine XML?<\/h2>\n
\n
\n
\n

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.<\/p>\n

In Abbildung 1 ist ein Beispiel einer XML Datei zu sehen. Ein XML Element besteht immer aus zwei Tags:<\/p>\n

    \n
  1. Öffnungstag<\/strong>: immer umgeben von spitzen Klammern<\/li>\n
  2. Schliesstag<\/strong>: besitzt immer einen vorangehenden Schrägstrich<\/li>\n<\/ol>\n

    Eine XML Datei besitzt immer genau ein Hauptelement und darf nicht mehrere hiervon enthalten.<\/strong><\/p>\n

    In diesem Beispiel ist dies das Element „House<\/em>“. Ein Element kann ebenfalls Unterelemente besitzen; hier „Windows<\/em>“, „Door<\/em>“ und „People<\/em>“. 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<\/em>” für die Anzahl der Fenster und Menschen sowie der “Name<\/em>” um die Personen zu identifizieren. Die Daten, die also nun übergeben werden sind:<\/p>\n

    ein Haus mit zwei Fenstern, einer Tür sowie drei Personen, welche die Namen Bernd, Lisa und Klaus haben.<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n

    <\/p>\n

    Abbildung 1: Beispiel XML<\/small><\/p>\n

    Eine solche Datei soll nun mit C# und der bereits im vorherigen TecTip erstellten Klassen erstellt werden.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

    \n

    3. Klassen anpassen<\/h2>\n
    \n
    \n
    \n

    Um eine XML Datei zu erzeugen, ist es wichtig, dass eine Klasse Eigenschaften mit dem Modifier „public<\/em>“ enthält.<\/strong> 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.<\/strong> Dies wird in der Zeile über der Klasse geschrieben.<\/p>\n

    Passen Sie hierzu zuerst die Datei SolidworksFile an, sodass jede Dateiart bestimmte Eigenschaften aufweist. Hier könnte beispielsweise die Eigenschaft “Dateiname<\/em>” eingefügt und die bestehende Eigenschaft “Dateipfad<\/em>” 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.<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n

    <\/p>\n

    Abbildung 2: Eigenschaften der Dateien<\/small><\/p>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n

    Nun müssen wir in der Datei AssemblyFile.cs eine Liste von PartFiles hinzufügen, da eine Baugruppe<\/a> 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<\/strong> zu setzen. Darüber hinaus benötigt diese Klasse auch einen leeren Konstruktor<\/strong>.<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n

    <\/p>\n

    Abbildung 3: Liste von Teilen einer Baugruppe<\/small><\/p>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n

    Abschliessend muss noch die PartFile.cs angepasst werden. Hier wird die Klasse nur auf public<\/strong> gesetzt und ein leerer Konstruktor<\/strong> erzeugt. Abbildung 4 zeigt dies nochmals.<\/p>\n

    <\/p>\n

    Abbildung 4: Anpassung der Teile-Datei<\/small><\/p>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n

    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<\/strong>. Würde keine Vererbung stattfinden, muss das Attribut in jeder Klasse gesetzt werden.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

    \n

    4. Serializer<\/h2>\n
    \n
    \n
    \n

    Um diese Klassen nun zu serialisieren, benötigt es zwei System-Bibliotheken. Hierfür werden zwei “Usings<\/strong>” verwendet:<\/span><\/p>\n