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

Quick Tip: Eine Communication Site als Subsite anlegen

Man kann über die UI keine Communication Site als Subsite anlegen. Per Powershell geht es aber problemlos.

Quick Tip: Mit einem Lookup auf den Dokumentennamen verweisen

Über die SharePoint Oberfläche kann man in einem Lookup nicht das Dateinamen auswählen. Dazu kann man aber PowerShell benutzen