我正在使用MS SQL2016,我有一个XML文件,我需要对其进行分析以将各种数据元素放入单独的字段中。在大多数情况下,所有内容都可以找到,除了我需要一点帮助来识别特定的节点值。如果有的话(我在这里只放了一段xml,但确实显示了问题)
DECLARE @xmlString xml
SET @xmlString ='<PubmedArticle>
<MedlineCitation Status="PubMed-not-MEDLINE" Owner="NLM">
<PMID Version="1">25685064</PMID>
<Article PubModel="Electronic-eCollection">
<Journal>
<ISSN IssnType="Electronic">1234-5678</ISSN>
<ISSN IssnType="Print">1475-2867</ISSN>
<JournalIssue CitedMedium="Print">
<Volume>15</Volume>
<Issue>1</Issue>
<PubDate>
<Year>2015</Year>
</PubDate>
</JournalIssue>
</Journal>
</Article>
</MedlineCitation>
</PubmedArticle>'
select
nref.value('Article[1]/Journal[1]/ISSN[1]','varchar(max)') ISSN
from @xmlString.nodes ('//MedlineCitation[1]') as R(nref)
我绕过第二个ISSNType并读取第一个可用的值。我需要同时提取两个值。我需要更改什么?谢谢
答案 0 :(得分:1)
您可以阅读第二栏:
SELECT
nref.value('Article[1]/Journal[1]/ISSN[1]','varchar(max)') ISSN,
nref.value('Article[1]/Journal[1]/ISSN[2]','varchar(max)') ISSN2
FROM @xmlString.nodes('//MedlineCitation[1]') as R(nref)
或
SELECT
nref.value('ISSN[1]','varchar(max)') ISSN,
nref.value('ISSN[2]','varchar(max)') ISSN2
FROM @xmlString.nodes('//MedlineCitation[1]/Article[1]/Journal[1]') as R(nref)
或作为单独的行:
SELECT nref.value('.','varchar(MAX)') ISSN
from @xmlString.nodes('//MedlineCitation[1]/Article[1]/Journal[1]/ISSN') as R(nref)
更新
如果ISSN的数量可能有所不同,建议您对结果集进行标准化:
SELECT
nref.value('.','varchar(MAX)') Issn,
nref.value('@IssnType','varchar(MAX)') IssnType
FROM @xmlString.nodes('//MedlineCitation[1]/Article[1]/Journal[1]/ISSN') as R(nref)