SSIS从文件夹中读取多个xml文件 [英] SSIS reading multiple xml files from folder

查看:40
本文介绍了SSIS从文件夹中读取多个xml文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我是 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 R2SSIS 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.

分步过程:

  1. 使用 SQL 脚本 部分下给出的脚本创建一个名为 dbo.Items 的表.
  2. 使用 XSD 文件 部分下提供的内容在文件夹路径 C:\temp\xsd 中创建名为 Items.xsd 的 XSD 文件.
  3. 在文件夹路径 C:\ 中创建三个 XML 文件,分别为 Items_1.xmlItems_2.xmlItems_3.xmltemp\xml 使用 XML 文件 部分下提供的内容.
  4. 在包上,创建 3 个变量,即 FileExtensionFilePathFolderPath,如截图 #1.
  5. 在包的连接管理器上,创建一个名为 SQLServer 的 OLE DB 连接以连接到 SQL Server 实例,如屏幕截图 #2 所示.
  6. Control Flow 选项卡上,在 Foreach 循环容器中放置一个 Foreach 循环容器 和一个 Data Flow Task,如截图 # 所示3.
  7. 配置 Foreach Loop 容器,如屏幕截图 #4 和 #5 所示.
  8. 双击Data Flow Task 以导航到Data Flow 选项卡.放置一个 XML Source 组件和一个 OLE DB Destination,如屏幕截图 #6 所示.
  9. 配置 XML 源,如屏幕截图 #7 和 #8 所示.XML 文件路径将从变量 FilePath 中检索.此变量将由 Foreach 循环容器 填充.注意:在更高版本的 Visual Studio 中,由于 ValidateExternalMetadata 属性,XML 源出错.要解决此问题,请单击XML 源",然后单击属性"并将 ValidateExternalMetadata 设置为 False.
  10. 配置 OLE DB 目标,如屏幕截图 #9 和 #10 所示.
  11. 屏幕截图 #11 和 #12 显示了包的执行情况.
  12. 屏幕截图 #13 显示了包执行前 的表数据.屏幕截图 #14 显示了包执行后 的表数据.表 dbo.Items 中的数据现在包含存在于三个 XML 文件中的数据.
  1. Create a table named dbo.Items using the script given under SQL Scripts section.
  2. Create an XSD file named Items.xsd in the folder path C:\temp\xsd using the content provided under XSD File section.
  3. Create three XML files namely Items_1.xml, Items_2.xml and Items_3.xml in the folder path C:\temp\xml using the content provided under XML Files section.
  4. On the package, create 3 variables namely FileExtension, FilePath and FolderPath as shown in screenshot #1.
  5. 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.
  6. On the Control Flow tab, place a Foreach loop container and a Data Flow Task within the Foreach loop container as shown in screenshot #3.
  7. Configure the Foreach Loop container as shown in screenshots #4 and #5.
  8. Double-click on the Data Flow Task to navigate to the Data Flow tab. Place an XML Source component and an OLE DB Destination as shown in screenshot #6.
  9. 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 the Foreach 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.
  10. Configure the OLE DB Destination as shown in screenshots #9 and #10.
  11. Screenshots #11 and #12 show the package execution.
  12. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆