Что такое xpath выражения

Синтаксис XPath

Для выбора узлов и наборов узлов в XML документе XPath использует выражения путей. Узел выбирается следуя по заданному пути или по, так называемым, шагам.

Пример XML документа

Для демонстрации синтаксиса XPath будет использоваться следующий XML документ:

Выбор узлов

Чтобы выбрать узлы в XML документе, XPath использует выражения пути. Узел выбирается следуя по заданному пути. Наиболее полезные выражения пути:

ВыражениеРезультат
имя_узлаВыбирает все узлы с именем «имя_узла»
/Выбирает от корневого узла
//Выбирает узлы от текущего узла, соответствующего выбору, независимо от их местонахождения
.Выбирает текущий узел
..Выбирает родителя текущего узла
@Выбирает атрибуты

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

Выражение XPathРезультат
messagesВыбирает все узлы с именем «messages»
/messagesВыбирает корневой элемент сообщений
Примечание: Если путь начинается с косой черты ( / ), то он всегда представляет абсолютный путь к элементу!
messages/noteВыбирает все элементы note, являющиеся потомками элемента messages
//noteВыбирает все элементы note независимо от того, где в документе они находятся
messages//noteВыбирает все элементы note, являющиеся потомками элемента messages независимо от того, где они находятся от элемента messages
//@dateВыбирает все атрибуты с именем date

Предикаты

Предикаты позволяют найти конкретный узел или узел с конкретным значением.

Предикаты всегда заключаются в квадратные скобки.

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

Источник

Что такое xpath выражения

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

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

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

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

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

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

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

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

Атрибуты

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

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

Примеры:

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

в текущем контексте

book/@styleАтрибут style всех элементов

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

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

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

Источник

Что такое XPath? Функции и синтаксис

Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения

В этом небольшом вводном руководстве разберемся с XPath, а также с его наиболее распространенными типами, операторами, узлами и функциями.

Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения

1. Что такое XPath? Отличия от XML

XPath или XML Path Language — язык запросов, используемый для навигации по XML-документу. XML — язык разметки, чем-то похожий на HTML, не выполняющий никаких действий, а просто служащий для описания и структурированного хранения каких-нибудь данных. Проще говоря — это куски информации, завернутые в теги, для получения которой разработчик пишет специальную программу. Чтобы такая программа нашла необходимые элементы, нужно проложить к ним путь. Этот путь называют XPath-выражение.

XPath применяется для перехода к любому необходимому нам тегу, атрибуту или ​​текстовому блоку и используется в связке с такими технологиями, как XSLT, XQuery, XLink и XPointer. XPath можно использовать в индустрии разработки ПО — почти все языки программирования поддерживают его, — а также при тестировании программного обеспечения, в частности для разработки сценариев автоматизации в Selenium. Кроме всего прочего, он является рекомендуемым языком консорциума World Wide Web (W3C), поэтому с ним стоит разобраться.

2. Узлы XPath

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

Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения

Существуют разные типы узлов XPath. Но прежде, чем их перечислить, напишем базовую программу XML, чтобы на ее примере объяснить все используемые здесь термины.

3. Оси (axis) в XPath

Оси определяют отношение узлового набора по отношению к текущему узлу. Рассмотрим самые основные из них и поймем, как они могут работать, в нашем примере:

4. Пути к элементам XPath

Мы с вами разобрали, что XPath ищет элементы на HTML или XML-страницах.

Для того чтобы добраться к искомому объекту, используются пути. Они являются наиболее полезным и широко используемым свойством XPath. Путь состоит из набора узлов XPath относительно его стартового (чаще всего корневого) элемента.

Есть два вида путей: абсолютный и относительный.

Абсолютным называется путь от корня документа. Он всегда начинается с косой черты “ / ”.

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

Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения

В XPath это будет выглядеть так:

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

Что такое xpath выражения. Смотреть фото Что такое xpath выражения. Смотреть картинку Что такое xpath выражения. Картинка про Что такое xpath выражения. Фото Что такое xpath выражения

Вот как это будет выглядеть в XPath:

5. Синтаксис XPath

Синтаксис языка запросов немного похож на обозначения, используемые в URL-адресах. XPath выражение — это не что иное, как путь к нужному нам элементу в дереве документа, где каждый уровень отделяется от другого косой чертой « / », а результатом его обработки может быть:

Ниже перечислены подстановочные знаки, применяемые в XPath-выражениях.

Предикаты используются как фильтры, ограничивающие узлы, которые выбраны выражением XPath. Каждый предикат преобразуется в логическое значение, истинное или ложное, если оно истинно для данного XPath, то этот узел будет выбран, если ложно, то — нет.

Предикаты всегда заключаются в квадратные скобки, например:

Этот пример выберет элемент с атрибутом, равным T2.

6. Функции XPath

XPath содержит стандартную библиотеку встроенных функций, необходимых для обработки узлов и работы с данными.
Их довольно много, поэтому перечислим некоторые из них:

1. Функции даты и времени:

3. Функции набора узлов:

4. Числовые функции:

5. Строковые функции:

Описания всех существующих ныне функций можно найти в спецификации W3 XPath.

7. Примеры использования XPath из практики парсинга информации с сайтов

Ниже приведем наиболее часто встречающиеся участки кода XPath, применяемые разработчиками для парсинга данных с веб-страниц:

XPath довольно полезная вещь, широко применяемая при автоматизации тестирования. Он действует как локатор элементов. Чтобы найти определенный кусок данных на странице и выполнить над ним какое-либо действие, необходимо просто указать его XPath в целевом столбце сценария инструмента тестирования Selenium.

Для закрепления материала приводим несколько полезных ссылок на релевантные видеоролики по теме:

Источник

Синтаксис XPath

XPath использует выражения пути для выбора узлов или множества узлов в документе XML. Узел выбран, следуя по пути или шаги.

Пример XML документа

Мы будем использовать следующий XML-документ в приведенных ниже примерах.

Выбор узлов

XPath использует выражения пути для выбора узлов в документе XML. Узел выбран, следуя по пути или шаги. Самые полезные выражения пути, перечислены ниже:

выражениеОписание
nodenameВыбирает все узлы с именем « nodename »
/Выбор из корневого узла
//Выбирает узлы документа из текущего узла, который соответствует выбору, независимо от того, где они находятся
.Выбирает текущий узел
..Выбирает родителя текущего узла
@Выбор атрибутов

В приведенной ниже таблице мы приводим несколько путей выражения и результат выражения:

Путь Expressionрезультат
книжный магазинВыбирает все узлы с именем «bookstore»
/книжный магазинВыбор корневого элемента книжный

Note: Если путь начинается с косой черты ( / ) всегда представляет собой абсолютный путь к элементу!

книжный магазин / книгаВыбирает все элементы книги, которые дети книжных магазинов
//книгаВыбирает все элементы книги, независимо от того, где они находятся в документе
книжный магазин // книгаВыбирает все книжные элементы, которые являются потомком книжного элемента, независимо от того, где они находятся под книжным элементом
// @ ЛангВыбирает все атрибуты, которые называются Ланг

Предикаты

Предикаты используются, чтобы найти конкретный узел или узел, который содержит конкретное значение.

Предикаты всегда вкладывается в квадратных скобках.

В приведенной ниже таблице мы перечислили некоторые выражения пути с предикатами и результат выражения:

Иерархия каталогов и файлов.

Иерархия элементов и других узлов XML-документа.

Файлы на каждом из уровней имеют уникальные имена. URL всегда идентифицирует один файл.

Имена элементов на каждом уровне могут быть неуникальны. Шаблоны XPath соответствуют набору всех соответствующих элементов.

Путь вычисляется относительно конкретного каталога, именуемого текущим каталогом.

Путь вычисляется относительно конкретного узла, в запросе именуемого контекстом.

Путь Expressionрезультат
/ Книжная / книга [1]Выбирает первый книжный элемент, который является дочерним книжным элементом.

Note: В IE 5,6,7,8,9 первый узел [0], но в соответствии с W3C, это [1]. Для того, чтобы решить эту проблему в IE, установите SelectionLanguage в XPath:

Выбор не указаны Узлы

XPath шаблоны могут быть использованы для выбора неизвестных узлов XML.

WildcardОписание
*Соответствует любой элемент узел
@*Соответствует любой узел атрибута
node()Соответствует любой узел любого рода

В приведенной ниже таблице мы приводим несколько путей выражения и результат выражения:

Путь Expressionрезультат
/книжный магазин/*Выбирает все дочерние узлы элемента книжного магазина элемента
// *Выбирает все элементы в документе
//заглавие[@*]Выбирает все названия элементов, которые имеют по крайней мере один атрибут любого вида

Выбор несколько трактов

При использовании | оператор в выражении XPath вы можете выбрать несколько путей.

В приведенной ниже таблице мы приводим несколько путей выражения и результат выражения:

Источник

XML Path Language (XPath) – это язык, разработанный специально для использования с XML и применяемый для поиска узлов и наборов узлов XML-документа в таких технологиях, как DOM и XSLT. Он представляет собой некий гибрид между указанием пути в командной строке и регулярными выражениями. XPath представляет XML-документ в виде дерева из узлов различных типов – элементов, атрибутов и текста. Выражения XPath могут идентифицировать эти узлы по их типу, имени и значениям, а также по взаимоотношениям узлов в документе.

Например, запрос «найти элементы ‘author’ с атрибутом ‘period’ и значением ‘classical’, содержащиеся в элементе ‘authors’ в документе root» может быть записан как XPath-выражение «/authors/author[@period=’classical’]».

Эти выражения лежат в основе XSLT, позволяя ассоциировать найденные с помощью таких выражений ветви документа с XSLT–шаблоном. Выражения, использующие синтаксис XPath, могут использоваться напрямую в XML Document Object Model (DOM).

Важной разновидностью XPath-выражений являются location path:, выражения, выбирающие набор узлов, относящихся к узлу контекста. Результатом выполнения такого выражения является набор узлов, содержащий выбранные узлы.

Синтаксис XPath

XML-документы представляют собой иерархию, или дерево узлов, в чем-то схожее с иерархией каталогов и файлов в файловой системе. Этом и объясняется сходство синтаксиса URL и XPath. В следующей таблице приведено сравнение некоторых свойств.

Файловая система (URL)

В следующем фрагменте XML-документа представлена простая иерархия, которая будет использоваться для демонстрации некоторых основных возможностей XPath-запросов.

Запрос XPath распознает все элементы, соответствующие пути. Поскольку XSLT позволяет выделять определенные узлы дерева, его можно использовать в качестве простого поискового механизма.

Кроме описания пути, XPath может включать wildcards (групповые символы). Элемент с любым именем обозначается символом «*».

В запросе можно использовать операторы сравнения. Следующий запрос возвращает имена русских авторов. Заметьте, что сравнения можно использовать только в квадратных скобках.

XML-атрибуты в запросе обозначаются символом «@» перед именем атрибута. Атрибут может проверяться как ветка основного пути, но запрос может и целенаправленно искать узлы атрибутов. Следующий пример возвращает авторов классического периода.

Таблица 4.Операторы и специальные символы XPath

Выбирает дочерние элементы коллекции, находящейся слева от него. При использовании в начале шаблона означает поиск от корневого элемента.

Рекурсивный спуск; ищет указанный элемент на любой глубине. При использовании в начале шаблона означает рекурсивный поиск от корневого элемента.

Wildcard, выбирает все элементы, независимо от имени.

Атрибут; префикс имени атрибута. При использовании без имени атрибута выбирает все атрибуты, независимо от их имени.

Сепаратор пространств имен. Отделяет префикс пространства имен от имени элемента или атрибута.

Группирует операции для явного задания очередности.

1. Накладывает фильтр.

2. Используется для индексации коллекции.

Деление с плавающей точкой (согласно IEEE 754).

Возвращает остаток при делении с остатком.

К оллекции

Возвращаемые XPath-запросами коллекции сохраняют порядок, иерархию и свойства исходного документа, если не указано, что их надо изменить. Поскольку атрибуты неупорядочены по определению, они и возвращаются неупорядоченными.

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

Так, следующие примеры равнозначны:

Индексация коллекций

Выражения XPath позволяют легко найти определенный узел документа. Нужно просто включить в выражение порядковый номер в квадратных скобках. Этот номер отсчитывается от нуля (номер первого элемента – ноль).

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

Например, следующее выражение находит первый элемент author.

А это выражение найдет третий элемент author из имеющих дочерний элемент:

Заметьте, что индексы отсчитываются относительно родительского элемента. Посмотрите на следующие данные:

Найдем первое y для каждого x.

Найдем первое y из всего набора элементов y внутри элементов x.

Найдем первое y от первого x.

Поиск последнего элемента коллекции

Функция last возвращает True для последнего элемента коллекции.

Например, следующее выражение найдет последнюю книгу:

Фильтрация

К любой коллекции можно применить ветвления и условия поиска с помощью наложения фильтра, [pattern]. Фильтр аналогичен SQL-выражению WHERE. Фильтр применяется последовательно ко всем элементам коллекции и выдает True/False в зависимости от того, удовлетворяет ли сравниваемый элемент фильтру. Любой элемент, не соответствующий фильтру, не включается в результирующую коллекцию.

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

Фильтры всегда применяются относительно контекста. Другими словами, выражение «book[author]» означает, что для каждого найденного элемента book будет выполнена проверка наличия дочернего элемента author. Сходным образом, «book[author = ‘Bob’]» означает, что для каждого найденного элемента book будет выполнена проверка наличия дочернего элемента author со значением «Bob». Можно также проверять значение контекста с помощью точки (.). Например, «book[. = ‘Trenton’]» означает, что для каждого элемента book, найденного в текущем контексте, проверяется, что его значение равно «Trenton».

Если фильтр сравнивает значения элементов и должен быть применен более чем к одному дочернему элементу, можно использовать ключевые слова any и all. Если эти слова не используются, для сравнения используется только первый найденный дочерний элемент.

Найти все книги, содержащие хотя бы один элемент [excerpt]:

Найти все названия книг, содержащие хотя бы один элемент [excerpt]:

Найти всех авторов книг, причем книги должны содержать хотя бы один элемент [excerpt], а у автора должна быть хотя бы одна степень:

Найти все книги с авторами, имеющими хотя бы одну степень:

Операторы

Фильтры могут содержать булевы выражения, выражения сравнения и выражения присвоения. В следующей таблице приведены символы, используемые в реализации XSLT фирмы Микрософт.

Объединение, возвращает объединение двух наборов узлов

* Метод расширенного XPath

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

Булевы выражения могут соответствовать всем узлам с конкретным значением или всем узлам со значениями в определенном промежутке.

Все операторы чувствительны к регистру ввода.

Булевы операторы and и or выполняют операции «логическое и» и «логическое или», соответственно. Эти операторы в сочетании с группирующими скобками можно использовать для создания замысловатых логических выражений.

Например, следующее выражение находит все элементы author, содержащие хотя бы по одному элементу degree и award.

А это – все элементы author, содержащие хотя бы один из элементов degree или award, и, по крайней мере, один элемент publication.

Булев оператор not служит для отрицания значения фильтрующего выражения. Например, следующее выражение находит все элементы author, содержащие по крайней мере один элемент degree и не содержащие элементов publication.

Сравнения

Для операций сравнения применяются два операнда: вектор или скаляр (значение с левой стороны, или lvalue), который сравнивается со скалярным значением (значение с правой стороны, или rvalue). rvalue должно быть скалярным или приводимым к скалярному в процессе обработки выражения.

Если lvalue сравнения – это множество, для операторов сравнения применяется семантика «any». Таким образом, результат сравнения равен True, если хотя бы один из членов множества отвечает условию.

lvalue выражения не может быть литералом. Например, «3» = a недопустимо. Если rvalue – это атрибут, text(lvalue) сравнивается с text(rvalue).

text(lvalue) оператор text(rvalue)

Для разделения строк в выражениях можно использовать одиночные или двойные кавычки. Это упрощает создание фильтров в скриптовых языках.

Например, следующее выражение находит все элементы author с именем Bob.

Находит все элементы degree, у которых атрибут from не равен «Harvard».

Находит все элементы author, у которых значение «last name» такое же, как у элемента /guest/last-name.

Находит все элементы author, содержащие текст «Matthew Bob».

Логика преобразования данных при сравнениях

При сравнении операндов разных типов данных производятся следующие преобразования.

Бинарные операторы сравнения

Оператор»|»

Оператор «|», он же оператор объединения, возвращает объединенные результаты двух запросов. Можно использовать несколько операторов объединения для объединения результатов нескольких запросов. Оператор объединения сохраняет порядок документа и не возвращает дубликатов.

Реализация Microsoft расширяет область действия этого оператора. Его можно использовать в любом месте запроса, а не только на верхнем уровне. Для поддержки такого поведения введено следующее ограничение: все объединяемые запросы должны относиться к одному поддереву и иметь один корень.

Как DOM определяет контекст для XPath-выражения

Парсер MSXML содержит методы, которые позволяют использовать строки XPath. Метод selectNodes, например, возвращает список узлов, как показано в следующем примере:

Поиск по дереву всех узлов «item» мог бы потребовать приличного количества кода. Метод selectNodes в сочетании с выражением XPath позволяет выбрать эти узлы с помощью единственной строки кода.

В большинстве случаев возвращенная коллекция узлов впоследствии подвергается дальнейшей обработке. Следующий пример показывает, как вычислить общую стоимость для элемента «invoice».

Этот пример содержит два контекста запроса. Первый запрос выполняется в контексте элемента «invoice», и строка поиска отражает это, начинаясь с элемента «items». Цикл for проходит по найденным узлам и использует каждый из них как контекст дальнейшего поиска. Следующие запросы работают в элементах «item», и ищут в них дочерние элементы «price» и «qty». Это показывает, что узел, относительно которого выполняется selectNodes, определяет контекст поиска.

Выполнение запросов от корня документа, а не от его корневого элемента, может привести к ошибке. Это разные узлы XML-дерева, что требует разных строк запроса. Следующие три выражения принесут одни и те же результаты при поиске в документе-примере, но только два последних логически эквивалентны.

Метод selectSingleNode возвращает первый соответствующий запросу узел, что позволяет легко получить конкретный узел, не извлекая его из NodeList. Это эквивалентно «selectNodes(pattern).item(0)». Использование этого метода позволяет упростить код предыдущего примера.

В этом примере selectNodes по прежнему используется для выборки набора элементов «item». Если ожидается одиночный узел, например, элементы «price» и «qty», можно использовать selectSingleNode.

Copyright © 1994-2016 ООО «К-Пресс»

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *