Поиск информации с помощью XPath Java

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

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

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

  1. Получение узла документа.
  2. Перечисление его дочерних узлов.
  3. Обнаружение элемента database.
  4. Получение первого дочернего элемента, username.
  5. Получение первого дочернего узла, который имеет тип Text.
  6. Получение данных.

Язык XPath позволяет описывать набор узлов в XML-документе. Например, следующее выражение описывает набор элементов row, которые являются дочерними по отношению к корневому элементу:

Для выбора конкретного элемента используется операция []. Следующее выражение определяет первый дочерний элемент(отчет индексов начинается с единицы):

Для получения значений атрибутов применяется операция @. Приведенное ниже выражение XPath описывает все узлы, соответствующие атрибутам anchor элементов cell. Элементы cell должны выходить в состав элементов row, которые являются дочерними по отношению к корневому элементу gridbag.

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

Примеры выражений XPath, в том числе довольно сложных, можно найти в спецификации http://www.w3c.org/TR/xpath. Существует также очень удачно составленное руководство, расположенное по адресу http://zvon.org/xxl/XPathTutorial/General/examples.html

В состав Java 5.0 включен API для обработки выражений XPath. В первую очередь надо создать объект XPath, используя для этого класс XPathFactory:

После этого можно вызывать метод evaluate(), обрабатывающий выражения XPath:

Один объект XPath можно применять для обработки нескольких выражений. Данный вариант метода evaluate() возвращает результат в виде строки. Это удобно для получения текста, каковым является содержимое узла username в предыдущем примере. Если выражение XPath описывает набор узлов, то для его обработки можно использовать следующий вызов:

Если результатом является один узел, то в качестве третьего параметра метода evauate() нужно указать значение XPathConstants.NODE:

Если результатом является число, применяется константа XPathConstants.NUMBER:

Начинать поиск не обязательно с корневого узла документа. В качестве исходной точки может выступать любой узел, и даже список узлов. Например, получив узел в результате обработки приведенного выше выражения, можно вызвать метод evaluate() следующим образом:

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

Поиск информации с помощью XPath JavaРис.1. Обработка выражений XPath

Код программы: