SSIS XML Задача для преобразования файла XML с использованием XSLT - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь добавить дату на страницу HTML, сгенерированную XML при использовании преобразования XSLT через SSIS.

Возьмите следующее XML:

<RootNode>
    <row>
        <Greeting>HelloWorld!</Greeting>
    </row>
</RootNode>

Используйте следующий XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:cs="urn:cs">
<msxsl:script language="C#" implements-prefix="cs">
<![CDATA[
public string datenow() {
    DateTime dt = System.DateTime.Now;
    do {
        dt = dt.AddDays(1);
    } while(IsWeekEnd(dt));

    return(dt.ToString("dd/MM/yyyy"));
}

private static bool IsWeekEnd(DateTime date) {
    return date.DayOfWeek == DayOfWeek.Saturday
        || date.DayOfWeek == DayOfWeek.Sunday;
}
]]>
</msxsl:script>
<xsl:template match="/RootNode">
<html>
  <body>
    <table border="1">
      <xsl:for-each select="row">
        <tr>
          <td>
            <xsl:value-of select="Greeting" /> <xsl:value-of select="cs:datenow()" />
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
</html>
</xsl:template>
</xsl:stylesheet>

Я следовал этим инструкциям: https://www.tutorialgateway.org/ssis-xml-task-to-transform-xml-file-using-xslt/

Если я запускаю это перед развертыванием, все работает, но как только я разверну его , затем он не запускает часть сценариев.

Затем я создал сценарий PowerShell для преобразования, опять же, если я запускаю перед развертыванием, все работает.

Сценарий PowerShell:

param
(
            [Parameter(Mandatory = $True)][string]$InputFile,
            [Parameter(Mandatory = $True)][string]$TransformFile,
            [Parameter(Mandatory = $True)][string]$OutputFile
)
try
{
            # Log in Parameters
            #
            Write-Host "Input XML: $InputFile"
            Write-Host "Transform XSL: $TransformFile"
            Write-Host "Output XML: $OutputFile"
            #
            # Not Using abs paths .. just to be safe
            #
            # Edit PackagePath to point to Package Path
            #
            $PackagePath = "D:\SSIS_DATA\REF EXPORT\XMLRequest\"
            #
            $InputFile = Join-Path $PackagePath $InputFile
            $TransformFile = Join-Path $PackagePath $TransformFile            
            $OutputFile = Join-Path $PackagePath $OutputFile
            #
            Write-Host "Input XML: $InputFile"
            Write-Host "Transform XSL: $TransformFile"
            Write-Host "Output XML: $OutputFile"
            #
            # Xsl Transform Settings - Allow scripting in XSL
            #
            $XsltSettings = New-Object System.Xml.Xsl.XsltSettings
            $XsltSettings.EnableDocumentFunction = 1
            $XsltSettings.EnableScript = 1
            #
            # Load and Process Files
            #
            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform
            $xslt.Load($TransformFile, $XsltSettings, $(New-Object System.Xml.XmlUrlResolver))
            $xslt.Transform($InputFile, $OutputFile)
            #
            Write-Host "Generated output is on path: $OutputFile"
}
catch
{
            Write-Host $_.Exception -ForegroundColor Red
}

В скрипте PowerShell вы можете видеть, что я включаю сценарий и функцию документа через параметр XSLT, установив = 1, я также пробовал True и $ True.

...