SQL通过标记值从XML中获取值



我有以下XML:

<Main>
<ResultOutput>
<Name>TEST1</Name>
<Value>D028</Value>
</ResultOutput>
<ResultOutput>
<Name>TEST2</Name>
<Value>Accept</Value>
</ResultOutput>
<ResultOutput>
<Name>TEST3</Name>
<Value />
</ResultOutput>
</Main>

我想要的是在SQL中获得<value>标记的值。

基本上想说得到<value>,其中<Name>的值为TEST1,作为一个例子

这是我目前所拥有的,但这取决于XML标签的位置:

XMLResponse.value(Main/ResultOutput/Value)[5]', nvarchar(max)')

最好的方法是不添加额外的where .value子句,而是直接在XQuery中完成。

使用[nodename]按子节点进行过滤,甚至可以嵌套这样的谓词。text()获取节点的内部文本:

XMLResponse.value('(/Main/ResultOutput[Name[text()="TEST1"]]/Value/text())[1]', 'nvarchar(max)')

下面是在您的问题中使用样例XML的示例。您需要对此进行扩展,以添加名称空间声明和适当的xpath表达式,这些表达式可能会出现在实际的XML中,正如您的查询尝试所建议的那样。

SELECT ResultOutput.value('Value[1]', 'nvarchar(100)')
FROM @xml.nodes('Main/ResultOutput') AS Main(ResultOutput)
WHERE ResultOutput.value('Name[1]', 'nvarchar(100)') = N'TEST1';

相关内容

  • 没有找到相关文章

最新更新