组件"XML Source"无法处理 XML 数据。不明确的复杂类型定义。元素 '%' 具有多个名为 '%' 的成员



我正在尝试使用SSIS加载XMl文件。我有我的示例XML和相应的XSD。

在我的SSIS包XML Soruce中,提供了输入XML文件路径和XSD路径,当我试图查看列时,我得到了以下错误

组件"XML源"无法处理XML数据。复杂类型定义不明确。元素"childusements"有多个名为"usements"的成员

我尝试用.Net(C#或VB)验证XML和相应的XSD,它通过了验证。

示例XML文件:

<gmx-rcc>
 <statement>
  <summaryAccountName>test test</summaryAccountName>
  <accounts>
   <account>
    <accountnumber>abcdefghijk</accountnumber>
    <meters>
     <meter>
      <mnumber>a123456</mnumber>
      <usages>
       <usage>
       <actualUsage>1234</actualUsage>
       <childUsages>
        <usage><actualUsage>1234</actualUsage></usage>
        <usage><actualUsage>1234</actualUsage></usage>
        <usage><actualUsage>1234</actualUsage></usage>
       </childUsages>
       </usage>
      </usages>
     </meter>
    </meters>
   </account>
  </accounts>
 </statement>
 </gmx-rcc>

对应的XSD:

<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="gmx-rcc">
  <xsd:complexType >
   <xsd:sequence maxOccurs="unbounded" minOccurs="0">
    <xsd:element type="statement" name="statement"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:complexType name="statement" >
  <xsd:choice maxOccurs="unbounded" minOccurs="0">
   <xsd:element name="summaryAccountName" type="xsd:string"/>
   <xsd:element ref="accounts"/>
  </xsd:choice>
 </xsd:complexType>
 <xsd:element name="accounts">
  <xsd:complexType>
   <xsd:sequence maxOccurs="unbounded" minOccurs="0">
    <xsd:element name="account" type="account"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:complexType name="account" >
  <xsd:choice maxOccurs="unbounded" minOccurs="0">
   <xsd:element name="accountnumber" type="xsd:string"/>
   <xsd:element ref="meters"/>
  </xsd:choice>
 </xsd:complexType>
 <xsd:element name="meters">
  <xsd:complexType>
   <xsd:sequence maxOccurs="unbounded" minOccurs="0">
    <xsd:element name="meter" type="meter"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:complexType name="meter" >
  <xsd:choice maxOccurs="unbounded" minOccurs="0">
   <xsd:element name="mnumber" type="xsd:string"/>
   <xsd:element ref="usages"/>
  </xsd:choice>
 </xsd:complexType>
 <xsd:element name="usages">
  <xsd:complexType>
   <xsd:sequence maxOccurs="unbounded" minOccurs="0">
    <xsd:element name="usage" type="usage"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:complexType name="usage" >
  <xsd:choice maxOccurs="unbounded" minOccurs="0">
   <xsd:element name="actualUsage" type="xsd:decimal"/>
   <xsd:element ref="childUsages"/>
  </xsd:choice>
 </xsd:complexType>
 <xsd:element name="childUsages">
  <xsd:complexType >
   <xsd:sequence maxOccurs="unbounded" minOccurs="0">
    <xsd:element name="usage" type="usage"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 </xsd:schema>

我认为SSIS源组件无法理解XSD是否包含自定义类型(在本例中为name="account"Type="account")。

但是,我们仍然可以使用XSLT通过简单的步骤解析XML

  1. 使用XML任务验证XML和XSD
  2. XSLT操作来简化xml数据,然后将其传递给xml源

参见示例:

http://www.rad.pasfu.com/index.php?/archives/21-XML任务更改数据样式-XSLT.html

-Vinay

最新更新