如何配置SSIS 'XML Task'组件批量处理XML文档的XSLT转换
解决SSIS批量XML文件的XSLT转换问题
我来帮你搞定这个批量XML转换的难题!你已经用For Each Loop Container遍历文件路径,这步走对了——问题核心是XML Task需要的是XML内容而非文件路径,只需要补充几个配置步骤就能正常运行,具体操作如下:
1. 确认For Each Loop的基础配置
- 确保你用的是Foreach File Enumerator,指向输入文件夹
../XML Candidates,文件筛选器设为*.xml - 在「变量映射」里,把遍历到的完整文件路径映射到一个包级字符串变量(比如命名为
@User::SourceXmlPath),索引设为0
2. 添加Script Task读取XML文件内容
XML Task无法直接识别文件路径,所以我们需要先把XML内容读入变量:
- 在Loop容器内,先添加一个Script Task
- 配置脚本的变量:
- 把
@User::SourceXmlPath设为ReadOnlyVariables - 把新建的字符串变量
@User::SourceXmlContent设为ReadWriteVariables
- 把
- 编辑C#脚本(VB.NET同理):
public void Main() { try { string xmlFilePath = Dts.Variables["User::SourceXmlPath"].Value.ToString(); // 读取XML文件内容到变量 string xmlContent = System.IO.File.ReadAllText(xmlFilePath); Dts.Variables["User::SourceXmlContent"].Value = xmlContent; Dts.TaskResult = (int)ScriptResults.Success; } catch (Exception ex) { // 可选:记录错误信息 Dts.Events.FireError(0, "读取XML文件失败", ex.Message, string.Empty, 0); Dts.TaskResult = (int)ScriptResults.Failure; } }
3. 配置XML Task实现XSLT转换
在Script Task后面添加XML Task,按以下步骤配置:
- Operation Type选择
XSLT - Source区域:
- Source Type选择
Variable - Source Variable选择刚才的
@User::SourceXmlContent
- Source Type选择
- XSLT区域:
- Source Type选择
File Connection,指向你准备好的XSL文件
- Source Type选择
- Destination区域(重点:动态生成输出文件路径):
- 先创建一个空的文件连接(比如命名为
TransformedXmlFile) - 选中XML Task,打开「属性」面板,找到
DestinationConnectionString,点击表达式按钮 - 输入以下表达式(需要预先定义
@User::OutputFolderPath变量,值为../XML Transformed):
这个表达式会从源文件路径中提取文件名,自动拼接到输出文件夹路径后,实现每个文件单独保存@[User::OutputFolderPath] + "\\" + SUBSTRING( @[User::SourceXmlPath], FINDSTRING(@[User::SourceXmlPath], "\\", LEN(@[User::SourceXmlPath]) - LEN(REPLACE(@[User::SourceXmlPath], "\\", ""))) + 1, LEN(@[User::SourceXmlPath]) )
- 先创建一个空的文件连接(比如命名为
4. 常见问题排查
如果还是遇到Property "New Source" has no source Xml text错误,检查:
- Script Task是否成功读取XML内容:可以在脚本里加日志,或者用SSIS的变量窗口实时查看
@User::SourceXmlContent的值 - 源XML文件是否格式合法:有没有损坏或空的XML文件
- 变量作用域是否正确:确保所有变量都是包级或Loop容器级,能被内部任务访问
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

