Фильтры и шаблоны фильтров

Ограничения и ветвление можно применять к любой коллекции путем добавления в нее предложения фильтра [pattern]. Этот фильтр аналогичен предложению SQL WHERE. Внутри фильтра содержится шаблон, который называется шаблон фильтра. Значением шаблона фильтра является логическое значение, которое проверяется для каждого элемента коллекции. Все элементы коллекции, которые не проходят проверку шаблоном фильтра, не включаются в итоговую коллекцию.

Для удобства при помещении коллекции внутрь фильтра формируется логическое значение TRUE, если коллекция содержит какие-либо члены, и значение FALSE, если коллекция пуста. Выражение, например author/degree, неявно содержит функцию преобразования коллекции в логическое значение — TRUE при наличии элемента <author> с дочерним элементом под названием <degree>.

Обратите внимание, что на данном уровне выражения может быть любое количество фильтров. Пустые фильтры недопустимы.

Фильтры всегда оцениваются в отношении контекста. Другими словами, выражение book[author] означает, что каждый обнаруженный элемент <book> следует проверить на наличие дочернего элемента <author>. Точно так же выражение book[author = 'Bob'] означает, что для каждый обнаруженный элемент <book> следует проверить на наличие дочернего элемента <author> со значением Bob. Проверить значение контекста также можно с помощью символа точки (.). Например, book[. = 'Trenton'] означает, что каждую книгу, обнаруженную в текущем контексте, следует проверить на значение Trenton.

Примеры

Выражение Ссылается на

book[excerpt]

Все <book> элементы, которые содержат хотя бы один элемент <excerpt>.

book[excerpt]/title

Все <title> элементы внутри элементов <book>, которые содержат хотя бы один элемент <excerpt>.

book[excerpt]/author[degree]

Все элементы <author>, которые содержат хотя бы один элемент <degree> и находятся внутри элементов <book>, которые содержат хотя бы один элемент <excerpt>.

book[author/degree]

Все элементы <book>, которые содержат хотя бы один элемент <author> хотя бы с одним дочерним элементом <degree>.

book[excerpt][title]

Все элементы <book>, которые содержат хотя бы один элемент <excerpt> и хотя бы один элемент <title>.

См. также

Справочник

Примеры XPath

Понятия

Образец XML-файла с синтаксисом XPath (inventory.xml)