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

SSIS包无法完整读取XML文件,缺失Date_of_adding字段求助

嘿,我来帮你捋捋这个SSIS读取XML的问题——我之前也碰到过类似的情况,尤其是处理带属性的XML和批量文件的时候,踩过不少坑。

先搞清楚问题根源:属性不在当前读取的节点层级上

大概率你的XML结构是嵌套的,Date_of_adding是父节点(比如根节点)的属性,而你当前用XML源直接读取的是子节点的明细数据,所以映射时根本看不到这个属性。举个例子,你的XML可能长这样:

<Inventory Date_of_adding="2024-05-20">
  <Products>
    <Product ID="101" Name="Laptop" Price="5999" />
    <Product ID="102" Name="Mouse" Price="99" />
  </Products>
</Inventory>

如果直接读取<Product>节点,父节点<Inventory>的Date_of_adding自然不在当前字段列表里——这时候你说的“分两部分读取再合并”就是正确的思路,具体操作如下:

第一步:拆分读取父节点属性和子节点明细

  • 读取父节点属性(获取Date_of_adding):
    新建一个XML源组件,设置“数据访问模式”为XML文件来自变量(因为你用For Each Loop,需要动态传递当前文件名)。点击“生成XSD”,确保根节点的Date_of_adding属性被包含到XSD中。这一步会为每个XML文件生成一条记录,只包含文件名和Date_of_adding字段。
  • 读取子节点明细:
    再新建一个XML源组件,同样用变量传递文件名,这次选择读取子节点(比如<Product>),生成对应的XSD获取明细字段。为了后续合并,记得给这部分数据加一个“文件名”字段(用派生列转换,把@[User::CurrentXMLFile]变量转成字段)。

第二步:合并两部分数据

用合并连接或者查找转换把两组数据关联起来:

  • 如果用合并连接:先给父节点属性数据和明细数据分别按“文件名”排序(用排序转换),然后在合并连接里以“文件名”为关联键,把Date_of_adding字段合并到明细数据中。
  • 如果用查找转换:把父节点属性数据作为查找源,关联键选“文件名”,然后把Date_of_adding作为输出字段添加到明细数据里。
额外要检查的两个关键点

1. 确保XSD正确识别了属性

有时候自动生成的XSD会漏掉属性定义,你可以手动编辑XSD,确认Date_of_adding被定义为属性:

<xs:element name="Inventory">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Products" type="ProductsType" />
    </xs:sequence>
    <xs:attribute name="Date_of_adding" type="xs:date" use="required" />
  </xs:complexType>
</xs:element>

如果自动生成的XSD里没有这行,手动加上后重新加载,就能看到Date_of_adding字段了。

2. 确认For Each Loop的变量配置正确

  • 确保你用的是Foreach File Enumerator,正确指定了目标文件夹和文件筛选器(比如*.xml)。
  • 把当前文件的完整路径赋值给一个字符串变量(比如@[User::CurrentXMLFile]),XML源必须通过这个变量动态获取文件名,不能用固定路径模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:43:26