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="Set
Attributes(x)"
Setzt einen
Attributwert für
Attribut x
xdt:Transform="Remove
Attributes(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="Remove
Attributes(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="Data Sour-ce=.\sqlexpress;Initial Catalog=
WWWings6_Produktion;Integrated Securi-ty=True;MultipleActiveResultSets=True"" providerName="System.Data.
EntityClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
Listing: Web.Release.config