在SSIS中使用“标题,详细信息和预告片”部分导入XML文件

时间:2016-06-08 21:46:13

标签: sql xml ssis xsd

我正在尝试通过SSIS加载XML文件。我想要注意,我确实通过SSIS生成了XSD。这是我能够成功加载的示例文件:

<?xml version="1.0" encoding="UTF-8"?>
<ACOParticipantData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header>
    <HeaderCode>HDR_PRVDR</HeaderCode>
    <FileCreationDate>20160101</FileCreationDate>
    <ACOProgCode>21</ACOProgCode>
  </Header>
  <Participants>
    <Participant>
      <ACO_ID>V199</ACO_ID>
     <TIN>123456789</TIN>
      <Old_TIN>987654321</Old_TIN>
      <Org_NPI>1234567890</Org_NPI>
      <Ind_NPI>1234567890</Ind_NPI>
      <CCN>123456</CCN>
      <PRG_Eff_Dt>20160101</PRG_Eff_Dt>
      <PRG_Term_Dt>20161231</PRG_Term_Dt>
      <ErrorCode>44</ErrorCode>
    </Participant>
  </Participants>
  <Trailer>
    <TrailerCode>TRL_PRVDR</TrailerCode>
    <FileCreationDate>20160101</FileCreationDate>
    <RecordCount>1</RecordCount>
  </Trailer>
</ACOParticipantData>

生产文件具有相同的格式,但我现在在SSIS中收到以下错误:

  

[XML Source [79]]错误:XML Source无法处理XML   数据。 Xml源文档包含&#34; xsi:nil&#34;属性与   &#34; Old_TIN&#34;的值为true元素,因此元素必须   空。

然而,似乎没有任何关于源文件的错误。如何成功调试和摄取此文件?

编辑: 在两个生产文件中,我稍微改变了较小的文件,但它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<ACOParticipantData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
    <HeaderCode>HDR_PRVDR</HeaderCode>
    <FileCreationDate>20160602</FileCreationDate>
    <ACOProgCode>21</ACOProgCode>
</Header>
<Participants xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Participant>
        <ACO_ID>V130</ACO_ID>
        <TIN>123456789</TIN>
        <Old_TIN xsi:nil="true">
        </Old_TIN>
        <Org_NPI xsi:nil="true">
        </Org_NPI>
        <Ind_NPI>0987654321</Ind_NPI>
        <CCN xsi:nil="true">
        </CCN>
        <PRG_Eff_Dt>20160101</PRG_Eff_Dt>
        <PRG_Term_Dt>20160601</PRG_Term_Dt>
        <ErrorCode>00</ErrorCode>
    </Participant>
    <Participant>
        <ACO_ID>V130</ACO_ID>
        <TIN>111222333</TIN>
        <Old_TIN xsi:nil="true">
        </Old_TIN>
        <Org_NPI xsi:nil="true">
        </Org_NPI>
        <Ind_NPI>4445556667</Ind_NPI>
        <CCN xsi:nil="true">
        </CCN>
        <PRG_Eff_Dt>20160101</PRG_Eff_Dt>
        <PRG_Term_Dt>20160601</PRG_Term_Dt>
        <ErrorCode>00</ErrorCode>
    </Participant>
</Participants>
<Trailer>
    <TrailerCode>TRL_PRVDR</TrailerCode>
    <FileCreationDate>20160602</FileCreationDate>
    <RecordCount>2</RecordCount>
</Trailer>
</ACOParticipantData>

1 个答案:

答案 0 :(得分:1)

真实数据XML 中搜索xsi:nil="true"

空或NULL已关闭但不完全相同。在某些情况下,需要区分这一点。

如果一个元素被标记为NULL,那么在你的情况下可能是<Old_TIN xsi:nil="true">,这个元素应该没有值。

如果xsi:nil标志是一个值,那就是矛盾...

更新

根据您的编辑,您可以在那里找到(减少)

<Participant>
    <Old_TIN xsi:nil="true">
    </Old_TIN>
    <Org_NPI xsi:nil="true">
    </Org_NPI>
    <CCN xsi:nil="true">
    </CCN>
</Participant>

这些元素不是NULL,它们包含换行符和空格...尝试将其更改为

<Participant>
    <Old_TIN xsi:nil="true"/>
    <Org_NPI xsi:nil="true"/>
    <CCN xsi:nil="true"/>
</Participant>