Sie sind hier

XML-Document-Transform (XDT)

Eintrag zuletzt aktualisiert am: 10.06.2010

XML-Document-Transform (XDT) ist eine Sprache für einfache Transformationen in XML-Dokumenten. Microsoft verwendet XDT für das Abänderungen von Konfigurationseinstellungen im Rahmen der Verbreitung ("Deployment") von .NET-Webanwendungen.

Beim Installieren von Anwendungen ist die Regel, das auf dem Zielsystem anderen Konfigurationseinstellungen als auf dem Entwicklersystem gelten (z.B. Datenbankverbindungen). Microsoft bietet (derzeit nur für Webanwendungen) eine Möglichkeit, die in den XML-Konfigurationsdateien (web.config) gespeicherten Konfigurationsinformationen automatisiert abzuändern im Zuge der Erstellung eines Deploymentpakets ab Visual Studio 2010.

Die beim Installieren des Deployment-Pakets angegebenen Verbindungszeichenfolgen dienten nur dazu, die Datenbankskripte während der Installation auszuführen. Die in der web.config-Datei hinterlegten Verbindungszeichenfolgen bleiben unberührt. Um diese anzupassen, muss man in Visual Studio zusätzlich sogenannte "Konfigurationsdateitransformationen" anlegen. In einer Konfigurationsdateitransformationen legt man fest, welche Teile der Konfiguration beim Verbreiten ersetzt, gelöscht und ergänzt werden sollen.
Microsoft verwendet hierfür nicht die XML Stylesheet Transformations (XSLT), sondern eine eigene XML-basierte Syntax, die Microsoft XML-Document-Transform (XDT) nennt.

Syntax

Die Syntax der Transformationsdateien besteht aus zwei Arten von Befehlen: Locators und Transformers.

Xdt:Locator="Match(xy)"
Finde ein Element, das ein Attribut xy besitzt mit dem gleichen Inhalt

xdt:Locator="Condition(@x=’a' or @y=’b’)"
Finde ein Element innerhalb des aktuellen Elements, das auf den Xpath-Ausdruck zutrifft

xdt:Locator="Xpath(//a/b)"
Finde ein Element global im Dokument, das auf den Xpath-Ausdruck zutrifft

xdt:Transform="Replace"
Erstetzt das erste passende Element

xdt:Transform="Remove"
Entfernt das erste passende Element

xdt:Transform="RemoveAll"
Entfernt alle passenden Elemente

xdt:Transform="Insert"
Füge ein Element ein

xdt:Transform="SetAttributes(x)"
Setzt einen Attributwert für Attribut x

xdt:Transform="RemoveAttributes(x,y,z)"
Entfernt die drei Attribute x, y und z

xdt:Transform="InsertAfter(/m/n/[@x='a'])”
Ergänzt das Element nach dem durch den X-Path-Ausdruck
festgelegten Element

xdt:Transform="InsertBefore(/m/n/[@x='a'])"
Ergänzt das Element vor dem durch den X-Path-Ausdruck festgelegten Element

Beispiel

Das folgende Listing zeigt an drei Beispielen die typischen Aktionen:
  • Entfernen eines Attributs (hier: Debug="true")
  • Hinzufügen eines XML-Elements (hier: <customErrors>)
  • Ersetzen eines XML-Elements (hier: <connectionStrings><add>)

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<!-- Entferne Debug-Attribut -->
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!-- Ergänze Umlenkung für Statuscode 500 -->
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
</system.web>
<connectionStrings>
<!-- Setzte Verbindungszeichenfolge -->
<add name="WWWings6EF" connectionS-tring="metadata=res://*/Entity Framework.EFModell.csdl|res://*/Entity Framework.EFModell.ssdl|res://*/Entity Framework.EFModell.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Sour-ce=.\sqlexpress;Initial Catalog=WWWings6_Produktion;Integrated Securi-ty=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
Listing: Web.Release.config