XPath, чтобы проверить, существуют ли все предоставленные пары элементов для записи - PullRequest
3 голосов
/ 23 февраля 2010

У меня есть следующий XML, хранящийся в поле XML в базе данных SQL Server 2008.

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

Я могу выбрать все записи из таблицы, которые имеют ключ «животных» со значением «крысы» со следующим xpath в sql.

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

Как бы я проверил совпадения с несколькими атрибутами?

Я пытаюсь найти строки, где: (ключ = животное и значение = крыса) и (ключ = цвет и значение = черный).

(Да, я мог бы добавить еще один .exist с предложением AND в своем предложении WHERE, но я стараюсь этого избежать) Бонусные баллы, если вы можете вести меня в правильном направлении, чтобы сделать это чем-то динамичным. Я хотел бы иметь хранимую процедуру или функцию, которая могла бы каким-то образом взять список пар ключ / значение и найти все строки, которые соответствуют всем предоставленным.

1 Ответ

3 голосов
/ 23 февраля 2010

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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...