使用元素中的集合处理多级xml

时间:2011-09-22 09:39:07

标签: xml ssis

我有一个xml文档,我将使用SSIS 2005解析为SQL表。 但是我遇到了一些麻烦,因为它是多层次的并且在每个帖子中都包含集合(?)。 我找到了一个解决方案,使用SSIS中的Merge Join将多级XML连接到一行,但我无法找到一种方法来处理多个< adress>将它们放到一行的元素。

希望有人可以帮我解决这个问题。

编辑:
所以我希望输出在一行中包含以下数据。

Personnummer, fornamn, efternamn, kon, epost, avdelning, foretagsnr, anstnr, 
arbetsledare, signatur, pkontering3, adress.hemadress.gatuadress, 
adress.hemadress.adress2, adress.hemadress.co_adress, adress.hemadress.postnr,
adress.hemadress.postort, adress.hemadress.land, adress.mobiltelefon.telefonnr,
adress.hemtelefon.telefonnr

希望你理解我的adress.hemadress / mobiltelefon / hemtelefon表示法。 < befattningar>元素未使用atm,如果它将与< adresser>使用相同的解决方案可能会奏效。 :)

这是xml结构的一个例子,你可以看到有三个< adress> < adresser>中的元素元素,我希望它们都输出到一行。如果可以忽略< adress>中的一些元素基于< adresstyp>中的文本的元素这个元素会很棒,但我想我可以在没有这个功能的情况下进行管理。

<PersonCollection> 
  <Person>
    <Personnummer>190001010101</Personnummer> 
    <Fornamn>firstname</Fornamn> 
    <Efternamn>lastname</Efternamn> 
    <Kon>K</Kon>
    <Epost>mail@mail.com</Epost> 
    <Avdelning>B</Avdelning> 
    <Foretagsnr>1</Foretagsnr> 
    <Anstnr>1</Anstnr> 
    <Arbetsledare>firstname lastname</Arbetsledare>
    <Signatur>X</Signatur> 
    <PKontering3>XXXX</PKontering3> 
    <Befattningar> 
        <Befattning> 
            <Status>X</Status>
            <Namn>Position</Namn> 
        </Befattning> 
    </Befattningar> 
    <Adresser>
        <Adress>
            <Adresstyp>Hemadress</Adresstyp> 
            <Telefonnr /> 
            <Gatuadress>Streetadress 1</Gatuadress> 
            <Adress2 /> 
            <Co_Adress /> 
            <Postnr>111 22</Postnr> 
            <Postort>City</Postort> 
            <Land>Country</Land> 
        </Adress>
        <Adress>
            <Adresstyp>Mobiltelefon</Adresstyp> 
            <Telefonnr>010-010 01 01</Telefonnr>
            <Gatuadress /> 
            <Adress2 /> 
            <Co_Adress /> 
            <Postnr /> 
            <Postort /> 
            <Land /> 
        </Adress>
        <Adress>
            <Adresstyp>Hemtelefon</Adresstyp> 
            <Telefonnr>01-01 01 01</Telefonnr> 
            <Gatuadress /> 
            <Adress2 /> 
            <Co_Adress /> 
            <Postnr /> 
            <Postort /> 
            <Land /> 
        </Adress>
    </Adresser>
  </Person>
</PersonCollection>

1 个答案:

答案 0 :(得分:0)

我通过在我的SSIS中使用三个SQL Server目标并指向&lt; person&gt;的输出来解决这个问题。到一张桌子,&lt; adress&gt;到一个表然后&lt; adresser&gt; (只包含personid和adresserid)到一张桌子,用于与地址和人员表匹配。 然后我在SQL Server中使用了一个视图来组合我想要的信息并使用SSIS生成的personid和adresserid(是否为我的xml生成了ID的SSIS?)。

但是我仍然很好奇它是否可以在SSIS中解决。