Базовый синтаксис XPath для парсинга элементов: | |||
1 | * | Выбрать любой элемент. | |
2 | [] | Найти конкретный элемент. | Пример: //li[1] |
3 | имя_узла | Выбирает все узлы с указанным именем узла. | Пример: div, p и т.д. |
4 | / | Ищет от корневого узла html | |
5 | // | Ищет узлы в документе от текущего узла, который соответствует выбору, независимо от того, где они находятся | |
6 | . | Ищет текущий узел | |
7 | .. | Ищет родителя текущего узла | |
8 | @ | Ищет нужный атрибут. | Пример: //p[@value="2008"] |
Общие функции XPath
Язык XPath имеет набор встроенных функций, которые позволяют осуществлять различные операции с XML-документами. Вот некоторые из основных функций XPath:
1 | text() | возвращает текстовое содержимое элемента. |
2 | count() | возвращает количество элементов, соответствующих указанному выражению. |
3 | удаляет лишние пробелы из строки и заменяет последовательности пробелов на одиночные пробелы. | |
4 | starts-with(x,y) | проверяет, начинается ли строка с x-y. |
5 | contains(x,y) | проверяет, содержит ли строка x-y. |
6 | last() | возвращает последнюю позицию элемента в выборке. |
7 | @attribute | выбирает значение указанного атрибута. |
Не работает в web-селекторах | ||
8 | position() | возвращает позицию текущего элемента в выборке. |
9 | name() | возвращает имя текущего элемента. |
10 | sum() | суммирует значения элементов выборки. |
11 | string() | преобразует узел в строку. |
12 | upper-case() | преобразует текст в верхний регистр. |
13 | lower-case() | преобразует текст в нижний регистр. |
14 | concat() | объединяет две или более строки. |
15 | string-length() | возвращает длину строки. |
16 | substring() | возвращает подстроку из строки, начиная с указанной позиции. |
Кроме этих основных функций, XPath также предоставляет более сложные функции, такие как функции математических операций (например, floor(), round(), sum()), функции работы с датами и временем и другие.
//input[@type='submit'] //tbody/tr[contains(@id,'anchor')] //tbody/tr[contains(@id,'anchor')][1] первый в списке //tbody/tr[contains(@id,'anchor')][last()] последний в списке //span[contains(text(),"Главн")] //span[starts-with(text(),"Главн")] //span[contains(text(),"Главн") and @class="color"] //span[contains(text(),"Главн")][@class="color"] //span[contains(text(),"Главн")]["color"] ПЛОХАЯ ПРАКТИКА //span[contains(text(),"Главн")][@class="color"]/.. подняться по DOM на уровень выше //input[@type='search'][starts-with(@id,'input-')] несколько параметров //div[contains(@class, "error-msg")] если указано несколько значений через пробел, а ищем по одному из них //div/div[2]/div[2]/text()[1] //*[normalize-space(text())='Компоненты'] //span[contains(.,'ABZ')]/following-sibling::span[1] брат следующий за тобой //ul/li[contains(text(),’Apple Mobiles’)]/following-sibling::li после :: локатор брата ./../preceding-sibling::div/span брат предыдущий перед тобой //div[contains(text(),'Превышен дневной лимит') or contains(text(),'Превышен')] //*[normalize-space(text())='Подписать']//ancestor::button //*[normalize-space(text())='Подписать']//parent::button
Не XPath, но полезно
ui-datepicker-popup.open .datepicker-cell:not(.off) :not() - за исключением класса 'off'