SSIS - XML 任务 - XSLT 操作

时间:2021-05-31 09:46:24

标签: sql xml xslt ssis

我有来自 SQL Server 的变量值(整数)。

以及包含大量元素的 XML 文件。这些元素之一具有一个值。我需要将此值替换(更改)为我的变量值。

我不知道如何使用 XML 任务 - XSLT 转换。

例如:

<块引用>

变量值:12345
XML元素:<元素>00000

我需要:

<块引用>

<元素>12345

感谢您的提示和技巧!

1 个答案:

答案 0 :(得分:0)

您真正要问的是如何将 SSIS 中的参数传递给 XML Task、XSLT 操作。

不幸的是,XML 任务功能有些限制。它不接受任何 XSLT 参数。

克服这种限制的简单方法很少:

  1. 使用参数实现 XSLT 转换的 SSIS 脚本任务。
  2. SSIS 脚本任务,通过 LINQ to XML API 修改 XML。

这里是如何通过方法#1 做到这一点。您需要将四个参数传递给 SSIS 脚本任务。其中三个用于 XML/XSLT/XML 文件,最后一个是您的 SSIS 变量。

c#

void Main()
{
   const string SOURCEXMLFILE = @"e:\Temp\UniversalShipment.xml";
   const string XSLTFILE = @"e:\Temp\UniversalShipment.xslt";
   const string OUTPUTXMLFILE = @"e:\temp\UniversalShipment_output.xml";
   bool paramXSLT = true;

   try
   {
      XsltArgumentList xslArg = new XsltArgumentList();
      if (paramXSLT)
      {
         // Create a parameter which represents the current date and time.
         DateTime d = DateTime.Now;
         xslArg.AddParam("date", "", d.ToString());
      }

      using (XmlReader src = XmlReader.Create(SOURCEXMLFILE))
      {
         XslCompiledTransform xslt = new XslCompiledTransform();
         xslt.Load(XSLTFILE, new XsltSettings(true, true), new XmlUrlResolver());

         XmlWriterSettings settings = xslt.OutputSettings.Clone();
         settings.IndentChars = "\t";
         // to remove BOM
         settings.Encoding = new UTF8Encoding(false);

         using (XmlWriter result = XmlWriter.Create(OUTPUTXMLFILE, settings))
         {
            xslt.Transform(src, xslArg, result, new XmlUrlResolver());
            result.Close();
         }
      }
      Console.WriteLine("File '{0}' has been generated.", OUTPUTXMLFILE);
   }
   catch (Exception ex)
   {
      Console.WriteLine(ex.Message);
   }
}