0

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

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

组件“XML 源”无法处理 XML 数据。模棱两可的复杂类型定义。元素“childusages”有多个名为“usages”的成员

我尝试使用 .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>
4

1 回答 1

0

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

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

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

参见示例:

http://www.rad.pasfu.com/index.php?/archives/21-XML-Task-Changing-Style-of-Data-XSLT.html

-维奈

于 2012-09-17T23:27:37.717 回答