I have an xml document that I would to parse using SSIS 2005 to an SQL table.
But I’m having some trouble with it because it is multi-level and contains collections(?) in each post.
I have found a solution to get multilevel XML to one row using Merge Join in SSIS, but I can’t figure out a way to handle the multiple <adress> elements to get them to one row.
Hope someone can help me out with this.
Edit:
So I would like the output to contain the following data in one row.
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
Hope you understand my adress.hemadress/mobiltelefon/hemtelefon notation. The <befattningar> element is not used atm, and if it will be used the same solution for <adresser> will probably work. 🙂
Here’s an example of the xml structure, as you can see there are three <adress> elements in the <adresser> element, and I would like them all to be output to a single row. If it was possible to ignore some of the elements inside the <adress> element based on the text in the <adresstyp> element that would be great, but I guess I can manage without that functionality.
<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>
I solved this by using three SQL Server destinations in my SSIS and pointing the output of <person> to one table, <adress> to one table and then <adresser> (which just contained personid and adresserid) to one table for match with adress and person table.
Then I used a view in SQL Server to put together the information I wanted and used the personid and adresserid generated by SSIS (is it SSIS that generated the ids for my xml?).
But I’m still curious if it can be solved inside SSIS.