Types/OpenPackage.Part/ReadXslt.ps1

<#
.SYNOPSIS
    Reads Part Content XSLT
.DESCRIPTION
    Reads an OpenPackage Part's Content as XSLT, or eXtensible Stylesheet Language Transforms
#>

[Reflection.AssemblyMetadata(
    'FilePattern', '\.xslt?$'
)]
[Reflection.AssemblyMetadata(
    'ContentTypePattern', '[/\+]xslt?$'
)]

param(
    # An optional input object
    # If provided, content will be read from this object.
    # If not provided, content will be read from this part.
    [Alias('Input')]
    [PSObject]$InputObject = $null,
 
    # Any options used to read the data.
    [Alias('Options')]
    [Collections.IDictionary]$Option = [Ordered]@{}
)

if ($InputObject -is [IO.Stream]) {
    try {        
        $xmlReader = [Xml.XmlReader]::Create($InputObject)
        $xslTransformer = [xml.Xsl.XslCompiledTransform]::new()
        $xslTransformer.Load($xmlReader)
        $xslTransformer
    } catch {
        $_
    } finally {
        if ($xmlReader) {
            $xmlReader.Close()
            $xmlReader.Dispose()
        }
    }
} elseif ($this.GetStream) {
    try {
        $partStream = $this.GetStream('Open', 'Read')
        $xmlReader = [Xml.XmlReader]::Create($partStream)
        $xslTransformer = [xml.Xsl.XslCompiledTransform]::new()
        $xslTransformer.Load($xmlReader)
        $xslTransformer
    } catch {
        $_
    } finally {
        if ($xmlReader) {
            $xmlReader.Close()
            $xmlReader.Dispose()
        }

        $partStream.Close()
        $partStream.Dispose()
    }
}