我正在尝试使用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
- 使用XML任务验证XML和XSD
- XSLT操作来简化xml数据,然后将其传递给xml源
参见示例:
http://www.rad.pasfu.com/index.php?/archives/21-XML任务更改数据样式-XSLT.html
-Vinay