Синтаксис XPath Syntax
XPath использует выражения путей для выбора узлов или наборов узлов в XML-документе. Узлы выбираются путём следования по пути или шагам.
Пример XML-документа
Мы будем использовать этот XML-документ в приведённых ниже примерах.
Пример
Выбор узлов
XPath использует выражения пути для выбора узлов в XML-документе. Узлы выбираются путем следования по пути или шагам. Ниже перечислены наиболее полезные выражения пути:
| Выражение | Описание |
|---|---|
| nodename | Выбирает все дочерние узлы этого узла. |
| / | Выбирает из корневого узла (берет дочерние узлы). |
| // | Выбирает узлы в документе от текущего узла, соответствующие выбору, независимо от их позиции (берет узлы-потомки). |
| . | Выбирает текущий узел. |
| .. | Выбирает родителя текущего узла. |
| @ | Выбирает атрибуты. |
В таблице ниже мы перечислили некоторые выражения пути и результаты этих выражений:
| Выражение пути | Результат |
|---|---|
| bookstore | Выбирает все узлы с именем bookstore. |
| /bookstore |
Выбирает корневой элемент bookstore. Примечание: если путь начинается с прямой косой черты ( / ), этот путь всегда представляет абсолютный путь к элементу! |
| bookstore/book | Выбирает все элементы book, которые являются дочерними для bookstore. |
| //book | Выбирает все дочерние элементы book независимо от их позиции в документе. |
| bookstore//book | Выбирает все элементы book, которые являются потомками элемента bookstore, независимо от того, где они расположены под bookstore. |
| //@lang | Выбирает все атрибуты с именем lang. |
Предикаты
Предикаты используются для поиска конкретного узла или узла, содержащего указанное значение.
Предикаты заключаются в квадратные скобки.
В приведённой ниже таблице мы перечислили некоторые выражения путей с предикатами и результаты этих выражений:
| Выражение пути | Результат |
|---|---|
| /bookstore/book[1] | Выбирает первый элемент book, являющийся дочерним элементом bookstore. |
| /bookstore/book[last()] | Выбирает последний элемент book, являющийся дочерним элементом bookstore. |
| /bookstore/book[last()-1] | Выбирает предпоследний элемент book, являющийся дочерним элементом bookstore. |
| /bookstore/book[position()<3] | Выбирает первые элементы book, являющиеся дочерними элементами элемента bookstore. |
| //title[@lang] | Выбирает все элементы title, имеющие атрибут с именем lang. |
| //title[@lang='eng'] | Выбирает все элементы title, имеющие атрибут lang со значением eng. |
| /bookstore/book[price>35.00] | Выбирает все элементы book элемента bookstore, и значение их элемента price должно быть больше 35.00. |
| /bookstore/book[price>35.00]//title | Выбирает все элементы title элементов book в элементе bookstore, и значение их элемента price должно быть больше 35.00. |
Выбор неизвестных узлов
Подстановочные знаки XPath можно использовать для выбора неизвестных элементов XML.
| Подстановочный знак | Описание |
|---|---|
| * | Соответствует любому узлу элемента. |
| @* | Соответствует любому узлу атрибута. |
| node() | Соответствует любому типу узла. |
В таблице ниже мы перечислили некоторые выражения пути и результаты этих выражений:
| Выражение пути | Результат |
|---|---|
| /bookstore/* | Выбирает все дочерние элементы элемента bookstore. |
| //* | Выбирает все элементы в документе. |
| //title[@*] | Выбирает все элементы title, имеющие атрибуты. |
Выбор нескольких путей
Используя оператор "|" в выражениях пути, можно выбрать несколько путей.
В таблице ниже мы перечислили некоторые выражения пути и результаты этих выражений:
| Выражение пути | Результат |
|---|---|
| //book/title | //book/price | Выбирает все элементы title и price элементов book. |
| //title | //price | Выбирает все элементы title и price в документе. |
| /bookstore/book/title | //price | Выбирает все элементы title элементов book, принадлежащих элементу bookstore, а также все элементы price в документе. |