Entwicklungstools

Code-Bestandteile aus XML generieren

In vielen Umgebungen werden XML-Dokumente genutzt, um Datenstrukturen oder ähnliches zu definieren. SharePoint nutzt beispielsweise XML-Dateien zur Definition von Spalten und Inhaltstypen. Will man die Datenstrukturen aus dem Code nutzen, verwendet man Ids, die in den XML-Dateien definiert sind. Um diese nicht als Strings über den Quelltext zu verteilen, bietet es sich an, Konstanten dafür zu definieren.
Bei einer kleinen Anzahl an Spalten ist die Erstellung des Codes für die Konstanten natürlich per Hand möglich; handelt es sich jedoch um viele Spalten, bietet es sich an, dies per Code-Generierung zu automatisieren. So ist man auch für weitere Spalten in der Zukunft gut gerüstet.

Einen sehr einfachen Weg bietet die PowerShell, den wir im Folgenden beschreiben:

Beispieldaten

Das folgende Beispiel zeigt die wesentlichen Bestandteile einer XML-Datei, in der einige SharePoint Site Columns definiert werden:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Field
    ID="{A15B67C3-70B3-4061-B116-CEDB43E99223}"
    Name="LastName">
  </Field>
  <Field
    ID="{1FE04065-69B2-408E-9CB8-4A45DDA27C81}"
    Name="FirstName">
  </Field>
  <Field
    ID="{69367257-E933-419F-9199-B3C1A7B52A25}"
    Name="EmailAddress">
  </Field>
  <Field
    ID="{62A73020-9EBA-4271-BBD0-BA9568AE0A7F}"
    Name="Company">
  </Field>
  <!-- ... -->
</Elements>

PowerShell-Skript

[Xml]$doc = Get-Content A:\Elements.xml
$doc.Elements.Field | 
   ForEach-Object { 'public static readonly Guid {0} = new Guid("{1}");' -f $_.Name, $_.Id } | 
   Clip

Das kurze Skript liest die XML-Datei aus und erstellt danach den Code, der Konstanten für die Ids definiert.

PowerShell kann von Haus aus gut mit XML-Daten umgehen. Durch die sogenannte Dot-Notation bietet PowerShell einen einfachen Zugriff auf die Inhalte. Hierbei kann auf die einzelnen Elemente wie auf Properties zugegriffen werden; in unserem Beispiel listet $doc.Elements.Field alle Field-Elemente unterhalb von Elements auf.

Über die Pipeline werden die Field-Elemente an Foreach-Object weitergereicht. Dieses generiert für jedes Element eine Textzeile, die die Deklaration der Konstante enthält.

Besonders nützlich ist das Weitergeben der Textzeilen am Ende an Clip. Dadurch werden diese in die Zwischenablage kopiert und können so direkt im Visual Studio eingefügt werden.

Das Ergebnis

public static readonly Guid LastName = new Guid("{A15B67C3-70B3-4061-B116-CEDB43E99223}");
public static readonly Guid FirstName = new Guid("{1FE04065-69B2-408E-9CB8-4A45DDA27C81}");
public static readonly Guid EmailAddress = new Guid("{69367257-E933-419F-9199-B3C1A7B52A25}");
public static readonly Guid Company = new Guid("{62A73020-9EBA-4271-BBD0-BA9568AE0A7F}");

Dieses Beispiel zeigt, wie Code-Bestandteile mit einfachen Mitteln generiert werden können. Besonders beeindruckend ist die Kürze des Skripts. Dies macht deutlich, dass es für Entwickler durchaus lohnend ist, den ein oder anderen PowerShell-Trick im Ärmel zu haben.

PowerShell Codegenerierung SharePoint Xml
Markus Wildgruber
Markus Wildgruber

Geschäftsführer

  • CloudArchitect
  • DeveloperCoach
  • DotNet
  • MongoDB
  • Angular