我有以下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';