XPath — это язык запросов для навигации по разметке XML. Эта разметка используется в Excel-таблицах, RSS-рассылках и многих других форматах. Язык запросов XPath нужен, чтобы искать в таких таблицах и выгрузках нужную информацию.
XPath расшифровывается как XML Path Language — «язык путей к XML». Фактически, с помощью этого языка описывают путь, по которому можно добраться до какого-то участка разметки. Запрос находит по описанному пути нужные элементы, возвращает их или преобразует.
XML — довольно старый формат. Сейчас с ним работают реже, чем раньше, но на нем до сих пор основаны многие важные технологии. XPath тоже появился еще в 90-х и оказался довольно простым, но мощным инструментом, поэтому сохранил актуальность даже сегодня.
Для чего нужен XPath
Таблицы и наборы данных в формате XML могут быть довольно большими, на сотни и даже тысячи записей. Разбираться в этом вручную долго и сложно. Поэтому, чтобы найти какую-то запись или элемент, используют специальные инструменты. XPath — один из них. Он помогает:
- быстро переходить к нужному элементу страницы или XML-документа;
- находить элементы по параметрам и свойствам;
- работать с форматом XSLT, который используется для трансформации XML;
- искать элементы в HTML, то есть в верстке веб-страницы;
- создавать выборки из содержимого документа по определенным критериям.
Кроме таблиц и XML-документов, XPath используют при работе с веб-страницами. С ним можно искать какие-то элементы страницы по тегам и свойствам. А еще XPath пользуется технология XSLT — она преобразует входные XML в другие XML-документы или в веб-документы XHTML по заданным правилам. Для работы с XSLT знать XPath обязательно.
Кто использует XPath
- Тестировщики, чтобы быстро переходить по участкам страницы и находить на ней нужные элементы.
- Разработчики, которым бывает нужно парсить какие-то страницы — «разбирать» на составляющие и сохранять нужную информацию. Это удобно делать с XPath.
- SEO-специалисты, которые часто работают с большими массивами данных в формате XML, занимаются парсингом, собирают ключевые слова и метаинформацию.
- Верстальщики, которым тоже может понадобиться быстрый доступ к какому-то элементу веб-страницы, чтобы не искать его вручную.
XPath может пригодиться и другим IT-специалистам или сотрудникам диджитал-сферы — всем, кому периодически бывает нужно находить и выгружать информацию с веб-страниц или из XML-документов.
Основные понятия XML для работы с XPath
В работе с XPath нужно знать несколько основных терминов — они описывают, как структурируется XML-документ.
Узлы. Узлами называют разнообразные части страницы или документа:
- отдельные элементы и записи;
- тексты;
- атрибуты;
- инструкции для обработки какой-то информации;
- комментарии;
- пространства имен;
- другие сущности на странице.
Весь XML-документ по сути представляет собой дерево узлов. Это значит, что все элементы группируются в древовидную структуру, которая строится по определенным правилам. Существует так называемый корневой элемент — от него «зависят» все остальные. В верстке он выглядит как тег, внутрь которого обернуты все другие теги на странице.
Предки и потомки. Структура иерархична: от корневого элемента как бы «отпочковываются» другие, зависящие от него. У узлов внутри структуры есть предки и потомки:
- предки — узлы, которые находятся «выше» и от которых зависит конкретный узел. Частный случай — родитель, узел на один «уровень» выше. У каждого элемента только один родитель;
- потомки — узлы, которые зависят и наследуются от конкретного узла. У элемента может быть ноль, один или больше потомков.
Атомарные узлы. Это узлы, которые не зависят от других, не имеют ни потомков, ни родителей. Они фактически одиночные. Как пример — блок текста на странице, не связанный с какими-то другими узлами.
Абсолютные и относительные пути в XPath
Чтобы найти что-то в XML-документе с помощью XPath, нужно написать запрос. Самый простой способ — указать путь к элементу. И путь этот может быть абсолютным или относительным.
Абсолютный путь. Нужно указать полный путь к элементу начиная с корня — он обозначается знаком /. Фактически мы сами говорим XPath, по какому пути находится элемент. А тот просто его находит и возвращает.
Относительный путь. Такой запрос может искать элемент из любого места в документе, а еще ему можно задавать условия — о них мы расскажем чуть ниже. Запрос по относительному пути начинается с двойного слэша //, потом пишется элемент или путь к нему.
Как выглядят запросы в XPath
Синтаксис запросов XPath довольно простой. Типичный запрос выглядит примерно так:
//some_tag[@attribute=’value’]
Двойной слэш означает, что мы ищем что-то по относительному пути, а текст после него — то, что именно ищем. В этом случае XPath найдет узел с именем some_tag, у которого есть атрибут со значением value.
Имя тега. Вместо some_tag можно указать разные значения, например;
- * — любой тег;
- input — тег элемента для ввода данных;
- a — ссылка, и так далее.
Туда можно подставить любое имя узла, которое есть в документе и которое нужно найти, скажем title или name.
То же самое касается атрибутов и их значений. Можно использовать все, что есть в XML или HTML. Скажем, главный атрибут тега a, то есть ссылки, — href: он описывает, по какому адресу ссылка ведет. А значением этого атрибута будет какой-то конкретный URL.
Предикаты. То, что находится в квадратных скобках, называется предикатом. Это какое-то условие, которому должен отвечать искомый тег.
- Предикаты могут быть простыми, например //some_tag[1] означает «найти первый элемент some_tag на странице». Тут нет знака @, потому что мы ищем не по атрибуту, а просто по номеру элемента. Кстати, в XPath нумерация начинается с 1, а не с 0, в отличие от языков программирования.
- Чаще в предикатах пишут не просто номер элемента, а какой-то его атрибут. В таком случае перед именем атрибута нужно написать @, а после него — то, каким должно быть значение этого атрибута.
Операторы. В запросах можно использовать логические операторы AND, OR и NOT. Синтаксис позволяет писать их словами, например [@lang=’en’ and @type=’text’] — вернуть элемент, который является текстом и при этом написан на английском языке. А еще вместо знака равенства можно использовать другие операторы сравнения. Например, корректной будет не только запись [@value = 11], но и [@value > 10].
Функции. В XPath можно искать не только по названиям и атрибутам тегов. Скажем, в документе есть элемент title с текстом «Котики», и мы хотим найти именно его. Обычные запросы, о которых мы говорили раньше, найдут элемент по расположению или атрибутам, но не по содержимому. А вот для поиска по значению можно использовать функции.
- Например, чтобы найти текст внутри тега, используют функцию text(). Выглядит это так: //title[text()=’Котики’].
- А если нам нужно найти элемент не по полному тексту, а по его части, можно использовать функцию contains(). Примерно так: //title[contains()=’Кот’].
XPath и CSS-селекторы: сходства и различия
XPath используют в том числе для навигации по HTML-документам. Но примерно ту же роль играют CSS-селекторы и команды JavaScript. Например, с помощью JS можно найти элемент HTML по его CSS-свойствам и классам. Но эти две технологии поиска — разные, и в некоторых ситуациях XPath удобнее:
- XPath умеет искать и потомков по родителям, и родителей по потомкам. А селекторы однонаправленные: в них нельзя напрямую обратиться к родителю какого-то элемента.
- XPath может искать не только по самим тегам, но и по их содержимому — это как раз делается с помощью функций. С помощью селекторов так сделать нельзя. Они анализируют только теги, атрибуты и их значения.
На практике обычно используют обе технологии. Что-то удобнее искать с помощью JS и селекторов, а что-то — с использованием XPath. Поэтому специалисту, который работает с вебом, лучше знать оба способа.
Как начать изучать XPath
Чтобы лучше ориентироваться в XPath, рекомендуем изучить, как работают языки разметки XML и HTML, какая у них структура и логика. После этого многое станет понятнее. Сам по себе XPath довольно простой: сложности могут возникнуть только с некоторыми функциями, но и тут со временем придет понимание. Главное — изучить базу.
0 комментариев