SSIS-如何使用XML Task

时间:2018-11-24 14:06:45

标签: sql-server xml ssis

因此,我有一个包含订单的XML文件,为此我正在使用Data Flow Task以便提取信息并将其插入MSSQL中的某些表中。到目前为止,一切都很好。但是,有一些信息我无法使用此方法,为此,我需要使用XML Task

XML Task

但是,我想提取几个信息,而不仅仅是一个字段。我该如何实现并将其进一步用于将它们插入表中?我的XML看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <UBLVersionID>2.1</UBLVersionID>
    <CustomizationID>ver2.0</CustomizationID>
    <ProfileID>RO11588780_RO13965909</ProfileID>
    <ID>00680733</ID>
    <CopyIndicator>true</CopyIndicator>
    <UUID>DX01_144_20181119_01006030</UUID>
    <IssueDate>2018-11-19</IssueDate>
    <OrderTypeCode>220</OrderTypeCode>
    <Note>STOCAJ</Note>
    <AccountingCostCode>32</AccountingCostCode>
    <LineCountNumeric>16</LineCountNumeric>
    <RequestedDeliveryPeriod>
        <StartDate>2018-11-23</StartDate>
        <EndDate>2018-11-23</EndDate>
        <Description/>
    </RequestedDeliveryPeriod>
    <BuyerCustomerParty>
        <ID>233</ID>
        <Price CurrencyID="RON">
            <Amount>40.85</Amount>
        </Price>
        <Quantity UnitCode="PCE">
            <Amount>2</Amount>
        </Quantity>
        <Item>
            <Description>HARRY POTTER 7</Description>
            <PackQuantity>1</PackQuantity>
            <PackSizeNumeric>2</PackSizeNumeric>
            <BuyersItemIdentification>32527676</BuyersItemIdentification>
            <StandardItemIdentification>9786067884159</StandardItemIdentification>
        </Item>
    </OrderLine>
    <OrderLine>
        <ID>234</ID>
        <Price CurrencyID="RON">
            <Amount>20.61</Amount>
        </Price>
        <Quantity UnitCode="PCE">
            <Amount>2</Amount>
        </Quantity>
        <Item>
            <Description>ARCUL DE ARAMA</Description>
            <PackQuantity>1</PackQuantity>
            <PackSizeNumeric>2</PackSizeNumeric>
            <BuyersItemIdentification>32527677</BuyersItemIdentification>
            <StandardItemIdentification>9786068811574</StandardItemIdentification>
        </Item>
    </OrderLine>
</Order>

1 个答案:

答案 0 :(得分:0)

首先,我将您的xml文件更改为(Sql服务器在抱怨标记..):

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <UBLVersionID>2.1</UBLVersionID>
    <CustomizationID>ver2.0</CustomizationID>
    <ProfileID>RO11588780_RO13965909</ProfileID>
    <ID>00680733</ID>
    <CopyIndicator>true</CopyIndicator>
    <UUID>DX01_144_20181119_01006030</UUID>
    <IssueDate>2018-11-19</IssueDate>
    <OrderTypeCode>220</OrderTypeCode>
    <Note>STOCAJ</Note>
    <AccountingCostCode>32</AccountingCostCode>
    <LineCountNumeric>16</LineCountNumeric>
    <RequestedDeliveryPeriod>
        <StartDate>2018-11-23</StartDate>
        <EndDate>2018-11-23</EndDate>
        <Description></Description>
    </RequestedDeliveryPeriod>
    <BuyerCustomerParty>
        <ID>233</ID>
        <Price CurrencyID="RON">
            <Amount>40.85</Amount>
        </Price>
        <Quantity UnitCode="PCE">
            <Amount>2</Amount>
        </Quantity>
        <Item>
            <Description>HARRY POTTER 7</Description>
            <PackQuantity>1</PackQuantity>
            <PackSizeNumeric>2</PackSizeNumeric>
            <BuyersItemIdentification>32527676</BuyersItemIdentification>
            <StandardItemIdentification>9786067884159</StandardItemIdentification>
        </Item>
    <OrderLine>
    </OrderLine>
        <ID>234</ID>
        <Price CurrencyID="RON">
            <Amount>20.61</Amount>
        </Price>
        <Quantity UnitCode="PCE">
            <Amount>2</Amount>
        </Quantity>
        <Item>
            <Description>ARCUL DE ARAMA</Description>
            <PackQuantity>1</PackQuantity>
            <PackSizeNumeric>2</PackSizeNumeric>
            <BuyersItemIdentification>32527677</BuyersItemIdentification>
            <StandardItemIdentification>9786068811574</StandardItemIdentification>
        </Item>
    <OrderLine>
    </OrderLine>
</BuyerCustomerParty>
</Order>

完成后,您可以按以下方式访问数据:

 Declare @fileData  XML 
             Select @fileData=BulkColumn from OpenRowSet(Bulk'PathtoXML\XMLFileName.xml',Single_blob) x;


 select 
                x.xData.value('ID[1]','int'),
                x.xData.value('Price[1]','float'),
                x.xData.value('Quantity[1]','int')
             from @fileData.nodes('/Order/BuyerCustomerParty') 
             x(xData);

这用于/ Order / BuyerCustomerParty节点。您可以将/ Order / BuyerCustomerParty / Item声明为节点,并为项目描述调用x.xData.value('Description [1]','varChar(max)')等等... 您可以将选择的内容轻松插入临时表中,从中可以管理yoyr xml数据。 希望对您有帮助!