用于检查条目是否存在所有提供的元素对的XPath

时间:2010-02-23 04:35:42

标签: sql-server-2008 xpath

我将以下XML存储在SQL Server 2008数据库的XML字段中。

<attributes>
  <attribute>
    <key>animal</key>
    <value>rat</value>
  </attribute>
  <attribute>
    <key>color</key>
    <value>black</value>
  </attribute>
</attributes>

我可以从表格中选择所有条目中的所有条目,其中“动物”键的值为“老鼠”,并在sql中包含以下xpath。

SELECT *
FROM XmlEvents
WHERE Attributes.exist('/attributes/attribute[key="animal" and value="rat"]') = 1

如何检查具有多个属性的匹配?

我正在尝试找到以下行:(Key = Animal&amp; Value = Rat)AND(Key = Color&amp; Value = Black)。

(是的,我可以在我的WHERE子句中添加另一个带有AND的.exist,但我试图避免这种情况)

如果你可以引导我朝着正确的方向发展,那就是积极的动力。我希望有一个存储过程或函数,它可以以某种方式获取键/值对的列表,并找到匹配所有提供的所有行。

1 个答案:

答案 0 :(得分:3)

XPath允许嵌套谓词和多个谓词。你可以写

/attributes[attribute[key="animal" and value="rat"]][attribute[key="color" and value="black"]]

或等效,但有点短

/attributes[attribute[key="animal"]/value="rat" and attribute[key="color"]/value="black"]