SSIS从文件夹中读取多个xml文件 [英] SSIS reading multiple xml files from folder
问题描述
大家好,我是 SSIS 的新手,我想读取特定文件夹中的一堆 xml 文件.我想读取 xml 文件并将数据输出到数据库表中.但是,我对从哪里开始有点困惑.有人能指出我正确的方向吗?我在互联网上进行了搜索,但所有教程似乎都涵盖了 txt 文件而不是 xml 文件的循环.如果有什么不同,我将使用 sql server 2005.
Hi all i'm new to SSIS and i'm wanting to read a bunch of xml files in a specific folder. I would like to read the xml files and output the data in a database table. However i'm a little bit confused as to where to start. Could someone point me in the right direction? I've had a search on the internet but all the tutorials seem to cover looping through txt files and not xml files. I will be using sql server 2005 if that makes any difference.
非常感谢:)
推荐答案
这是一个可能的选项,它演示了如何将具有相同定义的多个 XML 文件加载到 SQL Server 表中.该示例使用 SQL Server 2008 R2
和 SSIS 2008 R2
.此处显示的示例在 XML Source
组件的帮助下使用 SSIS Data Flow Task
将三个 XML 文件加载到 SQL 表中.
Here is a possible option which demonstrates how to load multiple XML files having same definition into an SQL Server table. The example uses SQL Server 2008 R2
and SSIS 2008 R2
. The example shown here loads three XML files into an SQL table using SSIS Data Flow Task
with the help of XML Source
component.
分步过程:
- 使用 SQL 脚本 部分下给出的脚本创建一个名为
dbo.Items
的表. - 使用 XSD 文件 部分下提供的内容在文件夹路径 C:\temp\xsd 中创建名为
Items.xsd
的 XSD 文件. - 在文件夹路径 C:\ 中创建三个 XML 文件,分别为
Items_1.xml
、Items_2.xml
和Items_3.xml
temp\xml 使用 XML 文件 部分下提供的内容. - 在包上,创建 3 个变量,即
FileExtension
、FilePath
和FolderPath
,如截图 #1. - 在包的连接管理器上,创建一个名为
SQLServer
的 OLE DB 连接以连接到 SQL Server 实例,如屏幕截图 #2 所示. - 在
Control Flow
选项卡上,在 Foreach 循环容器中放置一个Foreach 循环容器
和一个Data Flow Task
,如截图 # 所示3. - 配置
Foreach Loop 容器
,如屏幕截图 #4 和 #5 所示. - 双击
Data Flow Task
以导航到Data Flow
选项卡.放置一个XML Source
组件和一个OLE DB Destination
,如屏幕截图 #6 所示. - 配置
XML 源
,如屏幕截图 #7 和 #8 所示.XML 文件路径将从变量 FilePath 中检索.此变量将由Foreach 循环容器
填充.注意:在更高版本的 Visual Studio 中,由于 ValidateExternalMetadata 属性,XML 源将出错.要解决此问题,请单击XML 源",然后单击属性"并将 ValidateExternalMetadata 设置为 False. - 配置
OLE DB 目标
,如屏幕截图 #9 和 #10 所示. - 屏幕截图 #11 和 #12 显示了包的执行情况.
- 屏幕截图 #13 显示了包执行前 的表数据.屏幕截图 #14 显示了包执行后 的表数据.表
dbo.Items
中的数据现在包含存在于三个 XML 文件中的数据.
- Create a table named
dbo.Items
using the script given under SQL Scripts section. - Create an XSD file named
Items.xsd
in the folder path C:\temp\xsd using the content provided under XSD File section. - Create three XML files namely
Items_1.xml
,Items_2.xml
andItems_3.xml
in the folder path C:\temp\xml using the content provided under XML Files section. - On the package, create 3 variables namely
FileExtension
,FilePath
andFolderPath
as shown in screenshot #1. - On the package's Connection Managers, create an OLE DB Connection named
SQLServer
to connect to the SQL Server Instance as shown in screenshot #2. - On the
Control Flow
tab, place aForeach loop container
and aData Flow Task
within the Foreach loop container as shown in screenshot #3. - Configure the
Foreach Loop container
as shown in screenshots #4 and #5. - Double-click on the
Data Flow Task
to navigate to theData Flow
tab. Place anXML Source
component and anOLE DB Destination
as shown in screenshot #6. - Configure the
XML Source
as shown in screenshot #7 and #8. The XML file path will be retrieved from the variable FilePath. This variable will be populated by theForeach Loop container
. Note: In later versions of Visual Studio, XML Source will error out due to the ValidateExternalMetadata property. To fix this, Single click "XML Source" then Properties and set the ValidateExternalMetadata to False. - Configure the
OLE DB Destination
as shown in screenshots #9 and #10. - Screenshots #11 and #12 show the package execution.
- Screenshot #13 shows the table data before the package execution. Screenshot #14 shows the table data after the package execution. The data in the table
dbo.Items
now contains the data present in three XML files.
希望有所帮助.
SQL 脚本:
CREATE TABLE [dbo].[Items](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [nvarchar](50) NOT NULL,
[ItemName] [nvarchar](60) NOT NULL,
[Price] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
XSD 文件
<xsd:schema xmlns:schema="ItemsXSDSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="ItemsXSDSchema" elementFormDefault="qualified">
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="Items">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="Item">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Id" type="sqltypes:int" />
<xsd:element name="ItemNumber">
<xsd:simpleType>
<xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
<xsd:maxLength value="20" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ItemName">
<xsd:simpleType>
<xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
<xsd:maxLength value="60" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Price">
<xsd:simpleType>
<xsd:restriction base="sqltypes:numeric">
<xsd:totalDigits value="18" />
<xsd:fractionDigits value="2" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XML 文件
Items_1.xml
<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">
<Item>
<Id>1</Id>
<ItemNumber>I2345343</ItemNumber>
<ItemName>Monitor</ItemName>
<Price>299.99</Price>
</Item>
</Items>
Items_2.xml
<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">
<Item>
<Id>1</Id>
<ItemNumber>J1231231</ItemNumber>
<ItemName>Mouse</ItemName>
<Price>29.99</Price>
</Item>
</Items>
Items_3.xml
<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">
<Item>
<Id>1</Id>
<ItemNumber>K0456212</ItemNumber>
<ItemName>Keyboard</ItemName>
<Price>49.99</Price>
</Item>
</Items>
屏幕截图 #1:
屏幕截图 #2:
屏幕截图 #3:
屏幕截图 #4:
屏幕截图 #5:
屏幕截图 #6:
屏幕截图 #7:
截图 #8:
屏幕截图 #9:
屏幕截图 #10:
屏幕截图 #11:
屏幕截图 #12:
屏幕截图 #13:
屏幕截图 #14:
这篇关于SSIS从文件夹中读取多个xml文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!