【发布时间】:2015-05-03 20:57:50
【问题描述】:
在 xml 方面,我完全是新手。
到目前为止,我有一段想要从中提取信息的 xml,但所有节点名称都是相同的(所以它只抓取其中一个,除非另有说明)。
看起来像这样:
<DocumentElement>
<Screening>
<ScreeningID>2</ScreeningID>
<ScreeningDate>2011-09-13T00:00:00-04:00</ScreeningDate>
<ScreeningResult>1</ScreeningResult>
<ScreeningResultText>Negative</ScreeningResultText>
<TextResult>0</TextResult>
<TextResultText>Not Tested</TextResultText>
<PageNumber>0</PageNumber>
<AddedDate>2015-05-03T16:06:41.71774-04:00</AddedDate>
<UpdateDate>2015-05-03T16:06:41.71774-04:00</UpdateDate>
</Screening>
<Screening>
<ScreeningID>3</ScreeningID>
<ScreeningDate>2011-09-13T00:00:00-04:00</ScreeningDate>
<ScreeningResult>1</ScreeningResult>
<ScreeningResultText>Negative</ScreeningResultText>
<TextResult>1</TextResult>
<TextResultText>Negative</TextResultText>
<PageNumber>9</PageNumber>
<AddedDate>2015-05-03T16:25:21.2904988-04:00</AddedDate>
<UpdateDate>2015-05-03T16:25:21.2904988-04:00</UpdateDate>
</Screening>
我目前正在使用这种 sn-p 从 TextResult 区域中提取信息
Select
answer.value('(/DocumentElement/Screening/TextResult)[1]','int')
From
Answers
但是,这仅获取第一部分信息,我知道如果我写这样的内容,它会为我获取第二部分信息,但在另一列:answer.value('(/DocumentElement/Screening[2]/textResult)[1]','int')
我对此有两个问题: 1. 不一定只有 2 个具有相同名称的节点 - 它可以无限持续。 2. 我希望所有信息都集中在一个列中。
任何帮助将不胜感激!
【问题讨论】:
-
您是说要遍历它并获取所有
textResult项目吗?还是具有特定值的节点? -
你有一个 Screening[] 数组。所以 DocumentElement 是数据库。筛选是数据库中的一个表。 Sreening 下的标签是表中的字段(列),例如 ScreeningID、ScreeningDate、ScreeningResult、...。要获取数组,您需要查询 /DocumentElement/Screening 以获取 NodeList。
-
1:你能发布你的完整代码吗? 2:您使用的是什么 RDBMS?对于 XQuery,它们都有不同的限制和语法
-
我想捕获所有区域的所有文本结果。所以在这种情况下,它将捕获 0 & 1
-
也在代码中添加了sn-p——我只是想捕获testResults
标签: sql sql-server xml nodes