使用 element 中的集合处理多级 xml

发布于 2024-12-06 07:37:16 字数 3046 浏览 0 评论 0原文

我有一个 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 表示法。元素未使用 atm,并且如果将使用与相同的解决方案,则可以使用该元素。可能会起作用。 :)

这是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南城旧梦 2024-12-13 07:37:16

我通过在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文