使用 element 中的集合处理多级 xml
我有一个 xml 文档,我想使用 SSIS 2005 将其解析为 SQL 表。 但我遇到了一些麻烦,因为它是多层次的,并且每篇文章中都包含集合(?)。 我找到了一种使用 SSIS 中的 Merge Join 将多级 XML 获取到一行的解决方案,但我无法找到处理多个
希望有人能帮助我解决这个问题。
编辑:
因此,我希望输出在一行中包含以下数据。
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 表示法。
这是 xml 结构的示例,您可以看到有三个
<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>
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>[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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我通过在 SSIS 中使用三个 SQL Server 目标并将的输出指向来解决了这个问题。对于一张表,<地址>;到一张桌子,然后(仅包含 personid 和 adresserid)到一张表,用于与 adress 和 person 表匹配。
然后我使用 SQL Server 中的视图将我想要的信息放在一起,并使用 SSIS 生成的 personid 和 adresserid(是 SSIS 为我的 xml 生成 ids 吗?)。
但我还是很好奇是否可以在SSIS内部解决这个问题。
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.