[英]Parse XML using SQL Server 2016
我正在尝试清理一些 SQL 代码。 目前我有一个 XML 像:
DECLARE @xml xml = N'<PubmedArticleSet>
<PubmedArticle>
<MedlineCitation Status="MEDLINE" Owner="NLM">
<ArticleIdList>
<ArticleId IdType="pii">0092-8674(92)90516-F</ArticleId>
<ArticleId IdType="pubmed">1423608</ArticleId>
<ArticleId IdType="doi">10.1016/0092-8674(92)90516-f</ArticleId>
</ArticleIdList>
</PubmedData>
</PubmedArticle>
</PubmedArticleSet>'
我需要使用属性获取ArticleId
的值
IdType ="pubmed"
我想要类似XQUERY
方法的东西,它可以:
DECLARE @PMID NVARCHAR(15)
SET @PMID = @xml.value('(//PubmedData/ArticleIdList/ArticleId/@IdType)[1]', 'varchar(15)' )
但这会拉动第一个节点的 IdType “pii”。 和
SET @PMID = @xml.value('(//PubmedData/ArticleIdList/ArticleId/@IdType = "pubmed")[1]', 'varchar(15)' )
带回真实。
有没有办法根据“pubmed”进行过滤,然后得到数字 1423608? 所以@PMID
将等于 1423608。
您提供的 XML 格式不正确。 缺少几个标签,希望在这里更正:
DECLARE @xml xml = N'<PubmedArticleSet>
<PubmedArticle>
<PubmedData>
<MedlineCitation Status="MEDLINE" Owner="NLM">
<ArticleIdList>
<ArticleId IdType="pii">0092-8674(92)90516-F</ArticleId>
<ArticleId IdType="pubmed">1423608</ArticleId>
<ArticleId IdType="doi">10.1016/0092-8674(92)90516-f</ArticleId>
</ArticleIdList>
</MedlineCitation>
</PubmedData>
</PubmedArticle>
</PubmedArticleSet>';
DECLARE @IdToFind VARCHAR(100)='pubmed';
SELECT @xml.value('(/PubmedArticleSet
/PubmedArticle
/PubmedData
/MedlineCitation
/ArticleIdList
/ArticleId[@IdType=sql:variable("@IdToFind")]
/text())[1]','int');
简而言之:
<ArticleIdList>
和IdType
等于给定值的<ArticleId>
。text()
。您也可以通过简单的深度搜索得到相同的结果:
SELECT @xml.value('(//ArticleId[@IdType=sql:variable("@IdToFind")]/text())[1]','int');
但一般建议是:尽可能具体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.