我在数据库中有一个XML列,其中包含以下内容
<SelectedValues haveDefaultsBeenSet="true">
<SelectedValue>
<Name>Item Condition</Name>
<Value>New</Value>
<ValueID>1000</ValueID>
</SelectedValue>
<SelectedValue>
<Name>Brand</Name>
<Value>Sony</Value>
</SelectedValue>
<SelectedValue>
<Name>MPN</Name>
<Value>8</Value>
</SelectedValue>
<SelectedValue>
<Name>Model</Name>
<Value>DVD</Value>
</SelectedValue>
<SelectedValue>
<Name>MFR</Name>
<Value>Sony</Value>
</SelectedValue>
<SelectedValue>
<Name>PackQuantity</Name>
<Value>3</Value>
</SelectedValue>
</SelectedValues>
我试图在名称与MFR匹配时返回Value。因此,当我在寻找MFR时,我正在寻找索尼的结果
我试过这个
SELECT Itemspecifics.value('(/SelectedValues/SelectedValue/Value)[1]', 'varchar(max)') as MFR
FROM [SixBit_BT].[dbo].[ItemsEbay]
Where itemspecifics.exist('//.[text()="MFR"]') = 1
哪个只能在XML列中显示具有MFR的结果,但它在这种情况下为我提供了第一个值&#39; New&#39;。如果我将[1]更改为[5]。我确实得到了这个例子的正确结果,但并不总是在那个位置。
答案 0 :(得分:1)
我的xpath有点生疏,但我想你想要这样的东西:
'(/SelectedValues/SelectedValue[Name="MFR"]/Value)[1]'
或者就是这个,因为它应该给你一个单项
'/SelectedValues/SelectedValue[Name="MFR"]/Value'
这是一个类似的xpath示例,用于小理智检查,因为我现在无法自己测试这个: How to get value through xpath for repeating tags,it's like key value pair
答案 1 :(得分:0)
您的代码只选择第一个Value
节点,而不是第一个匹配“MFR”的节点。请改用:
SELECT Itemspecifics.query('//SelectedValue[Name = "MFR"]/Value').value('.[1]','varchar(max)')
FROM [SixBit_BT].[dbo].[ItemsEbay]
Where itemspecifics.exist('//.[text()="MFR"]') = 1