在SQL Server中解析多级XML(Parsing a MultiLevel XML in SQL Server)

编程入门 行业动态 更新时间:2024-10-23 15:25:06
在SQL Server中解析多级XML(Parsing a MultiLevel XML in SQL Server)

我需要解析具有多级多元素的XML。

示例XML:

<Studies> <Study ID="1"> <Site Id="1"> <Participant ID="111"/> <Participant ID="222"/> </Site> <Site Id="2"> <Participant ID="333"/> <Participant ID="444"/> </Site> </Study> <Study ID="2"> <Site Id="3"> <Participant ID="555"/> <Participant ID="666"/> </Site> <Site Id="4"> <Participant ID="777"/> <Participant ID="888"/> </Site> </Study> </Studies>

我试过了:

SELECT StudyID = XC.value('@ID', 'int'), SiteId = XC2.value('@Id', 'int'), ParticipantId = XC3.value('@ID', 'int') FROM @Xml.nodes('//Study') AS XT(XC) CROSS APPLY xc.nodes('Site') AS XT2(XC2) CROSS APPLY xc.nodes('Participant') AS XT3(XC3)

这不返回任何数据。 如果我改变

xc.nodes('Participant') AS XT3(XC3)

xc.nodes('//Participant') AS XT3(XC3)

它返回32行。

我期待8行。 有什么指针吗?

I need to parse an XML with multi-level multiple elements.

A sample XML:

<Studies> <Study ID="1"> <Site Id="1"> <Participant ID="111"/> <Participant ID="222"/> </Site> <Site Id="2"> <Participant ID="333"/> <Participant ID="444"/> </Site> </Study> <Study ID="2"> <Site Id="3"> <Participant ID="555"/> <Participant ID="666"/> </Site> <Site Id="4"> <Participant ID="777"/> <Participant ID="888"/> </Site> </Study> </Studies>

I have tried:

SELECT StudyID = XC.value('@ID', 'int'), SiteId = XC2.value('@Id', 'int'), ParticipantId = XC3.value('@ID', 'int') FROM @Xml.nodes('//Study') AS XT(XC) CROSS APPLY xc.nodes('Site') AS XT2(XC2) CROSS APPLY xc.nodes('Participant') AS XT3(XC3)

This returns no data. If I change

xc.nodes('Participant') AS XT3(XC3)

to

xc.nodes('//Participant') AS XT3(XC3)

it returns 32 rows.

I am expecting 8 rows though. Any pointers?

最满意答案

SELECT StudyID = XC.value('../../@ID', 'int'), SiteId = XC.value('../@Id', 'int'), ParticipantId = XC.value('@ID', 'int') FROM @Xml.nodes('//Studies/Study/Site/Participant') AS XT(XC) SELECT StudyID = XC.value('../../@ID', 'int'), SiteId = XC.value('../@Id', 'int'), ParticipantId = XC.value('@ID', 'int') FROM @Xml.nodes('//Studies/Study/Site/Participant') AS XT(XC)

更多推荐

本文发布于:2023-08-02 14:11:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1376944.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Server   SQL   XML   MultiLevel   Parsing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!