You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS包Foreach循环中XML源读取文件遇KeyNotFoundException错误

解决SSIS XML源抛出的KeyNotFoundException错误

针对你遇到的这个「给定键不在字典中」(荷兰语原文:De gegeven sleutel is niet aanwezig in het woordenboek)的错误,结合你的Foreach循环遍历XML文件的场景,我整理了几个实用的排查和解决方向:

1. 确保所有XML文件的架构完全匹配

虽然你确认了内嵌架构有效,但要注意循环里的每一个XML文件必须和你定义的内嵌架构100%一致——包括元素名称、层级结构、数据类型,甚至命名空间和大小写(XML是大小写敏感的)。哪怕某个文件多了一个节点、少了一个属性,都可能触发这个字典键找不到的异常。

  • 建议你随机挑选几个循环里的XML文件,手动绑定到XML源进行测试,验证是否都能正常解析;
  • 如果存在架构不一致的文件,要么统一所有XML的结构,要么在数据流中增加分支逻辑,单独处理不同架构的文件。

2. 验证变量传递的准确性

确认User::FileName变量在每次循环时都正确更新,且XML源确实拿到了有效的文件路径:

  • 可以在Foreach循环内添加一个脚本任务,把User::FileName的值打印出来(比如用C#代码:MessageBox.Show(Dts.Variables["User::FileName"].Value.ToString());),检查每次循环的文件名是否正确;
  • 确认变量的作用域覆盖了Foreach循环和数据流任务,避免出现变量不可访问的情况;
  • 核对XML源的「从变量获取XML文件」配置,确保绑定的确实是User::FileName,没有选错其他变量。

3. 重置XML源的架构缓存

有时候SSIS会缓存第一次加载的XML架构,后续循环中如果文件架构有细微差异,就会导致缓存不匹配:

  • 打开数据流任务,选中XML源右键选择「编辑」;
  • 临时将数据源切换为某个具体的XML文件,重新加载架构后,再改回「从变量获取XML文件」;
  • 保存包后重新运行,看是否解决问题。

4. 检查XML文件的编码与特殊字符

部分XML文件如果编码声明和实际编码不一致(比如声明为UTF-8但实际是GBK),或者包含未转义的特殊字符(如&、<、>),也可能导致解析异常,间接触发这个错误:

  • 用记事本打开XML文件,检查顶部的编码声明(如<?xml version="1.0" encoding="UTF-8"?>)和文件实际编码是否匹配;
  • 确认所有特殊字符都已正确转义(比如&要写成&amp;)。

5. 临时替换变量传递方式做测试

如果以上方法都无效,可以临时做个测试:把Foreach循环获取的文件名写入到一个本地配置文件,让XML源直接读取配置文件里的路径,排查是否是变量传递过程中存在隐形问题。


错误原文参考:
[XML Source [50]] Error: System.Collections.Generic.KeyNotFoundException: De gegeven sleutel is niet aanwezig in het woordenboek. bij System.Collections.Generic.Dictionary`2.get_Item(TKey key) bij Microsoft.SqlServer.Dts.Pipeline.DtsDataTableCollection.AssociateTablesWithBuffers(IDTSOutputCollection100 outputs, IDTSBufferManager100 bufferManager, Int32 localeID, DataSet dataSet) bij Microsoft.SqlServer.Dts.Pipeline.DtsD...

内容的提问来源于stack exchange,提问作者Fabio Bruna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:18:55