Обработка многоуровневого xml с коллекцией в элементе

У меня есть XML-документ, который я хотел бы проанализировать с помощью SSIS 2005 в таблице SQL. Но у меня с этим проблемы, потому что он многоуровневый и содержит коллекции (?) в каждом сообщении. Я нашел решение для получения многоуровневого XML в одну строку с помощью Merge Join в SSIS, но я не могу найти способ обработки нескольких элементов ‹address›, чтобы поместить их в одну строку.

Надеюсь, кто-то может помочь мне с этим.

Изменить:
Поэтому я хотел бы, чтобы выходные данные содержали следующие данные в одной строке.

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

Надеюсь, вы понимаете мою нотацию адрес.hemadress/mobiltelefon/hemtelefon. Элемент ‹befattningar› не используется в банкомате, и если он будет использоваться, вероятно, сработает то же решение для ‹addresser›. :)

Вот пример структуры xml, как вы видите, в элементе ‹addresser› есть три элемента ‹address›, и я хотел бы, чтобы все они выводились в одну строку. Если бы можно было игнорировать некоторые элементы внутри элемента ‹address› на основе текста в элементе ‹adresstyp›, это было бы здорово, но я думаю, что могу обойтись и без этой функциональности.

<PersonCollection> 
  <Person>
    <Personnummer>190001010101</Personnummer> 
    <Fornamn>firstname</Fornamn> 
    <Efternamn>lastname</Efternamn> 
    <Kon>K</Kon>
    <Epost>[email protected]</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>

person Markus    schedule 22.09.2011    source источник
comment
Вам нужны элементы адреса в одной строке с записью Person или в одной строке отдельно?   -  person Wil    schedule 22.09.2011
comment
На один ряд вместе с человеком. Я отредактирую и добавлю объяснение.   -  person Markus    schedule 23.09.2011


Ответы (1)


Я решил эту проблему, используя три назначения SQL Server в своем SSIS и указав вывод «person» на одну таблицу, «address» на одну таблицу, а затем «addresser» (который только что содержал personid и adresserid) на одну таблицу для сопоставления с адресом. и персональный стол. Затем я использовал представление в SQL Server, чтобы собрать нужную мне информацию, и использовал идентификатор человека и адрес, сгенерированные SSIS (это SSIS сгенерировал идентификаторы для моего xml?).

Но мне все еще любопытно, можно ли это решить внутри SSIS.

person Markus    schedule 23.09.2011