输入: 我的输入文件是XML文件。它们由SSIS中的foreach文件枚举器读取。
过程: SSIS脚本组件(C#)从变量中读取文件名。 我创建了一个XSL文件,用于将XML转换为必要的格式。脚本任务使用XSL文件,并转换XML文件(到文本)
以下是我使用的代码:
public override void CreateNewOutputRows()
{
XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load(_xsltFile);
transformer.Transform(_fileName, @"C:\macro3\outputTestFile.txt");
}
问题:
正如预期的那样,这会将转换后的文本内容写入上述输出文件。我想阅读每一行,处理它,并加载到数据库。
现在,写入文件,再次阅读它是一种开销。
有没有办法可以将转换后的内容读入任何对象并迭代它(实际上没有写入文件)?喜欢Stream还是什么?
可替换地:
虽然 SSIS“XML任务”具有“操作类型= XSLT”功能,但如果“SourceType”是可变的,则它不会读取XML,并且我在文件名中包含路径变量即可。它期待变量中的XML内容。任何可能的工作?
请在评论中询问具体细节,以便我可以相应更新。谢谢。
所示答案 0 :(得分:1)
不使用脚本任务,而是使用数据流。数据流用于转换内存中的数据流,因此听起来就像您所追求的那样。
有两种选择:
无论哪种方式,请确保将目的地设置为"快速加载"加快速度。
如果您决定在数据流中完全执行此操作,但如果您不再需要它,那么就XML任务而言,您需要使用文件连接作为源代替的可变即可。 MSDN notes 变量仅用于保存XML内容的变量。您需要设置表达式in the same way you would for any file source,并传递文件路径变量。
答案 1 :(得分:0)
我能够解决这个问题。 变换的重载之一有所帮助。
这是我做的:
public override void CreateNewOutputRows()
{
XmlReader read = XmlReader.Create(_fileName);
XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load(_xsltFile);
StringWriter sw = new StringWriter();
transformer.Transform(read, null, sw);
String[] rows = sw.ToString().Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
String tag;
foreach (String row in rows)
{
// additional code here
TagValueBuffer.AddRow();
TagValueBuffer.TagValue = row;
}
}
我需要帮助从变换后的文本中读取线条。看起来我需要输出到流,然后使用StringWriter。
然后我根据新的行分割它并运行foreach