我在SQL Server的变量中有值(整数(。
以及包含大量元素的XML文件。其中一个元素有一个值。我需要将这个值替换(更改(为我的变量值。
我不知道如何使用XML任务-XSLT转换。
例如:
变量值:1234
XML元素:<元素>00000</元素>
我需要:
<元素>1234<元素>
感谢您的提示和技巧!
您真正要问的是如何将SSIS中的参数传递给XML任务,XSLT操作。
遗憾的是,XML任务功能有些有限。它不接受任何XSLT参数。
有几种简单的方法可以克服这种限制:
- SSIS脚本任务,该任务使用参数实现XSLT转换
- SSIS脚本任务,通过LINQ到XML API的XML修改
- 等等
以下是如何通过方法#1进行操作。您需要将四个参数传递给SSIS脚本任务。其中三个用于XML/XLT/XML文件,最后一个是SSIS变量。
c#
void Main()
{
const string SOURCEXMLFILE = @"e:TempUniversalShipment.xml";
const string XSLTFILE = @"e:TempUniversalShipment.xslt";
const string OUTPUTXMLFILE = @"e:tempUniversalShipment_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);
}
}