# Процессы Ресурсы Цикл разработки ПО Waterfall RUP Agile Kanban Управление Архитектура Ресурсы ПО для Архитектора Кто архитекторы? Архитектурные слои язык Archimate GAP-анализ SOA Типы интеграции Vision (Концепция) Проектное решение ESB Микросервисы и service mesh HTTP/REST RPC DDD Анализ Ресурсы ПО для Аналитика Кто аналитики? Бизнес-процесс Требования Уровни и типы Источники Стейкхолдеры Нотации Сервисы DevOps CI/CD/CDP VM и Docker Контракты API Оценка задачи git Frontend Apache Регулярка Linux Тестирование Ресурсы QA и QC Цикл тестирования Уровни тестирования Виды тестирования Баг-репорт Тестирование требований Тест-анализ и тест дизайн Интеграционное, API, E2E Тест план Метрики качества Автотесты Selenium XPATH Нагрузочное Данные Ресурсы MDM Big data Об информации SQL intro MongoDB intro Библиотека Системная инженерия Станислав Лем Экстраполяция в будущее Политэкономия Сознание, интеллект

/ АНАЛИЗ АРХИТЕКТУРА ДАННЫЕ DevOps Gaming Библиотека ПРОЦЕССЫ ТЕСТИРОВАНИЕ: + ТЕСТИРОВАНИЕ + Тестирование требований + Тест-анализ и тест дизайн + Импакт-анализ в тестировании + API, интеграционное и E2E + Тест план + Метрики качества + Android + Автоматизация + Selenium WebDriver - XPATH | XPATH и с чем его едят + Различные расчёты + Безопасность + Нагрузочное
Xpath
latest update of the page: 18-03-2024, 20:25 UTC
XPATH и с чем его едят

XPath = язык запросов к элементам XML или HTML документа, сиречь, ищет в таком документе нужное вам.
Так же как и SQL, XPath является декларативным языком запросов.
Чтобы получить интересующие данные, необходимо всего лишь создать запрос, описывающий эти данные. Всю "чёрную" работу за вас выполнит интерпретатор языка xpath.

Выражения XPath создаются с помощью операторов и специальных символов, например:

/ Оператор "дочерний элемент" — выбирает дочерние элементы коллекции, указанной слева.
Если этот оператор стоит в начале шаблона, будут выбраны дочерние элементы корневого узла.
// Оператор "потомок" — поиск заданного элемента на любой глубине.
Если этот оператор пути стоит в начале шаблона, то поиск будет вестись из корневого узла.
. Указывает текущий контекст.
.. Родитель текущего узла контекста.
* Символ-шаблон — выбирает все элементы независимо от их имени.
@ Атрибут — префикс имени атрибута.
@* Символ-шаблон атрибута — выбирает все атрибуты независимо от имени.
: Разделитель пространства имени; отделяет префикс пространства имени от собственно имени элемента или атрибута.
( ) Группирует операции для явного задания порядка их выполнения.
[ ] Применяет шаблон фильтра.
[ ] Оператор индекса; используется для индексирования коллекции.
+ Выполняет сложение.
- Выполняет вычитание.
div Выполняет деление с плавающей запятой по стандарту IEEE 754.
* Выполняет умножение.
mod Возвращает остаток от деления по модулю.
last() Возвращает последний элемент коллекции.
Например, ul/li/div/p[last()] возвратит последние параграфы для каждого узла списка ul
text() Возвращает текстовое содержание элемента.
Например, .//a[text() = 'Archive'] получает все ссылки с текстом "Archive".

Приоритет операторов сравнения и логических операторов (от высокого к низкому):

Очерёдность Операторы Описание
1 ( ) Группирование
2 [ ] Фильтры
3 / // Операции с путями
4 < <= > >= Сравнения.
Например,
ul/li[position() > 2] — элементы списка, начиная с 3-го номера
ul/li[position() <= 2] — элементы списка, начиная с 2го номера и менеее
5 = != Сравнения
6 | Объединение
7 not() Логическое НЕ
8 And Логическое И
9 Or Логическое ИЛИ

Приоритет операций (от высокого к низкому) определяется следующим образом:

Очерёдность Символ Написание
1 ( ) Группирование
2 [ ] Фильтры
3 / // Операции с путями

Оператор группирования ( ) применим только для выражения пути верхнего уровня.
Например, (//author/degree | //author/name)допустимая операция группирования, а //author/(degree | name)недопустимая.

Операторы шаблонов фильтра [ ] имеют более высокий приоритет, чем операторы пути / и //.
Например, выражение //comment()[3] выбирает все комментарии с индексом, равным 3, связанные с родительским элементом комментария в любом месте документа. Оно отличается от выражения (//comment())[3], выбирающего третий комментарий из множества всех комментариев, связанных с родительским элементом. Первое выражение может вернуть несколько комментариев, а второе — только один.

Операторы пути

С помощью операторов пути / и // можно описать коллекцию элементов определенного типа. Эти операторы принимают в качестве аргументов коллекцию "с левой стороны", из которой производится выбор, и коллекцию "с правой стороны" как инструкцию, указывающую, какие элементы нужно выбирать. Оператор "дочерний элемент" / производит выбор из непосредственных дочерних элементов левой коллекции, в то время как оператор "потомок" // производит выбор из всех потомков коллекции левой стороны. Оператор // можно рассматривать как подстановку для одного или нескольких уровней иерархии.

Следует заметить, что операторы пути изменяют контекст по мере выполнения запроса. Соединив несколько операторов пути, можно просмотреть всё дерево документа.

Примеры:
Выражение Ссылается на
author/first-name Все элементы <first-name> внутри элемента <author> текущего узла контекста.
bookstore//title Все элементы <title> на первом или более глубоких уровнях элемента <bookstore> (потомки произвольного уровня). Обратите внимание на отличие от следующего шаблона:bookstore/*/title.
bookstore//book/excerpt//emph Все элементы <emph> в любом месте внутри элементов <excerpt>, дочерних по отношению к элементам <book>, находящимся в любом месте внутри элемента <bookstore>.
.//title Все элементы <title> на первом или более глубоких уровнях текущего контекста. Обратите внимание, что только в этой ситуации требуется нотация с использованием точек.

Символ-шаблон

Элемент можно использовать, не указывая его имя, с помощью коллекции символов-шаблонов *. Коллекция/* означает все элементы, являющиеся дочерними для текущего контекста, независимо от имени тега.

Примеры:
Выражение Ссылается на
author/* Все дочерние элементы элементов <author>.
book/*/last-name Все элементы <last-name>, являющиеся "внуками" элементов <book>.
*/* Все элементы-внуки текущего контекста.
my:book Элемент <book> из пространства имен my.
my:* Все элементы из пространства имен my.

Атрибуты

В языке XPath имена атрибутов включают символ @. Атрибуты и дочерние элементы обрабатываются одинаково, и эти два типа считаются эквивалентными везде, где это возможно.

Атрибуты не могут содержать дочерних элементов, поэтому применение операторов пути к атрибутам порождает синтаксические ошибки. Кроме того, к атрибутам нельзя применять индексы, поскольку их порядок по определению не задан.

Примеры:
Выражение Ссылается на
@style Атрибут style контекста текущего элемента
price/@exchange Атрибут exchange элементов <price> в текущем контексте
book/@style Атрибут style всех элементов <book>

Следующий пример содержит ошибку, поскольку у атрибута не может быть дочерних элементов: price/@exchange/total

Поиск нескольких атрибутов

Все атрибуты элемента можно получить с помощью метода @*. Это может быть полезно для приложений, рассматривающих атрибуты как поля записи. Примеры:

Выражение Ссылается на
@* Все атрибуты текущего узла контекста.
@my:* Все атрибуты из пространства имен my. Сюда не входят неуточненные атрибуты, принадлежащие элементам из пространства имен my.