Ich kenne XSL-Transformationen schon lange und benutze Sie gerne. XSL steht für "X"tensible "S"tylesheet "L"anguage und ist für eine Methode, mit der man aus den Daten in einer XML Datei und einem Stylesheet eine Textdatei erzeugen kann.
XSL ist ein wenig aus der Mode gekommen, bietet gegenüber anderen Template Systemen aber ein paar - in meinen Augen sehr interessante - Features, die man sonst nirgendwo findet.
Aber erstmal ein Beispiel:
Mit diesem XML ("input.xml")
<data>
<row title="Rot" colorcode="#F00" />
<row title="Blau" colorcode="#00F" />
<row title="Gelb" colorcode="#FF0" />
</data>
und diesem XSL ("stylesheet.xsl")
<data>
<row title="Rot" colorcode="#F00" />
<row title="Blau" colorcode="#00F" />
<row title="Gelb" colorcode="#FF0" />
</data>
können wir die folgende HTML Datei erzeugen ("output.html")
<data>
<row title="Rot" colorcode="#F00" />
<row title="Blau" colorcode="#00F" />
<row title="Gelb" colorcode="#FF0" />
</data>
Dafür brauchen wir aber ein XSL Transformations Tool. Glücklicherweise können wir uns da aber recht einfach eine Powershell Function erstellen
function Transform-XML{
param ($xml, $xsl, $output)
{
# Prepare settings objects
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$argslist= New-Object System.Xml.Xsl.XsltArgumentList;
# Prepare stylesheets
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
# Prepare outfile
$outFile= new-object System.IO.FileStream($output,[System.IO.FileMode]::Create,[System.IO.FileAccess]::Write)
# Transform the file
$xslt.Transform($xml,$argslist,$outFile);
$outFile.Close()
}
# Invoke the function
Transform-XML ./input.xml ./stylesheet.xsl ./output.html