XSL Transformation mit Powershell

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

Hat dir das gefallen? Vielleicht magst du auch...

Teams erstellen mit dem PNP Provisioning Schema

So geht es

Stubenhocker HEC Telefontalk - Sven Sieverding zu LowCode und PowerApps

Wie breche ich alle laufenden Runs zu einem Flow ab?

Ich zeige hier, wie das geht.