Как сделать путь xpath

Добавил пользователь Владимир З.
Обновлено: 05.10.2024

В предыдущей статье "Введение в DOM или объектная модель документа" было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath.

В предыдущей статье Введение в DOM или объектная модель документа было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath (XML Path Language) .

Модель DOM имеет древовидную структуру, зачастую ей проводят аналогию с организацией хранения файлов в папках, где каждый конечный узел сравнивают с файлом, нахождение которого заранее известно по пути до него через папки и подпапки. Не зря в названии языка присутствует слово "путь" (path в переводе с английского означает путь). Именно определение пути к данным лежит в основе xPath.

На вход конструкции xPath подается выражение, определяющее путь до искомых узлов, например такое "/someTag/someSubTag" (означает выборку всех элементов с именем someSubTag внутри элементов someTag, расположенных на первом уровне документа). На выходе образуется список найденных узлов. Список представляет собой коллекцию, которую можно обойти циклом и произвести манипуляции с узлами-элементами списка, например извлечь их значения.

Давайте подробнее остановимся на выражении xPath, определяющем путь, и его составных частях. Выражение состоит из так называемых шагов адресации (имен тегов), разделенных слэшем - косой чертой "/" и как уже было сказано выше - очень похоже на путь к файлу в файловой системе. Если путь начинается с "/", то это задает абсолютный путь к заданному элементу (от корня документа). Если же путь начинается с "//", то это означает произвольное (любое) количество уровней (от корня документа) перед искомым путем. Символ "*" в пути означает любой элемент, тот же символ в конце пути означает, что нужно выбрать все элементы по пути, указанному до этого символа, например "//someTag/someSubTag/*" (выбрать все элементы по пути /someTag/someSubTag, при этом расположение начала пути от корня документа не имеет значения и может начинаться на любом уровне).

Также в адресации могут использоваться квадратные скобки, которые задают более четкие критерии поиска, например "/someTag/someSubTag[1]" (первый элемент из найденных) или "/someTag/someSubTag[last()]" (последний элемент из найденных). Как видно, в квадратных скобках могут использоваться еще и специальные функции. Также в квадратных скобках могут задаваться условия на наличие у узлов атрибутов, на значение атрибутов, условия-отрицания и многое другое. Ниже приведена ссылка, по которой можно посмотреть различные варианты условий.

В 1С работа с xPath реализована через метод объекта ДокументDOM ВычислитьВыражениеXPath. Вариант синтаксиса языка 1с для работы с xPath приведен ниже:

вариант синтаксиса 1с для работы с xPath

Теперь для наглядности работы выборки xPath выражения посмотрите скриншоты ниже:

Пример 1

Пример 2

Пример 3

Пример 4

Пример 5

Углубиться в тему и посмотреть примеры (в т.ч. и более сложные) различных xPath выражений можно по этой ссылке.

Вы уже знакомы со взглядом на документы с позиции XPath; например, в XPath определено семь типов узлов документа:

• Корневой узел. Самое начало документа. Этот узел представляет в XPath весь документ;

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

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

• Узлы комментариев. Текст комментариев, не включая ;

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

• Узлы инструкций обработки. Содержат текст инструкции обработки, не включая ;

• Текстовые узлы. Текст PCDATA. Текстовые узлы по умолчанию в XPath нормализованы, поэтому расположенные рядом текстовые узлы немедленно объединяются.

Для задания узла или набора узлов в XPath служит путь расположения (location path). Путь расположения, в свою очередь, состоит из одного или более шагов расположения (location step), также называемых просто шагами, разделенных / или //. Если путь расположения начинается с /, он называется абсолютным путем расположения, поскольку путь задается от корневого узла; иначе путь называется относительным, начинаясь от контекстного узла.

Шаги расположения, строительные блоки путей расположения, во многом похожи на образцы шага (step patterns), формирующие образцы выбора, которые мы видели в главе 4. В частности, шаг расположения образован из оси (axis), условия узла (node test) и предикатов (которых может и не быть) по такому образцу: axis::nodetest[predicate]. Например, в выражении ancestor::NAME[position() > 100], ancestor — это имя оси, NAME — условие узла и [position() >100] — предикат. (Предикат сам содержит законченное выражение XPath, обычно возвращающее логическое значение.) Пути расположения создаются при помощи одного или более шагов расположения, таких как /descendant::PLANET/child::NAME, который выбирает все элементы с родителем

Шаги XPath похожи на образцы шага из главы 4, так как общий их вид одинаков — axis::nodetest[predicate] — но в данном случае нужно рассмотреть значительно больше материала. Например, осей теперь тринадцать, а не две.

Шаги расположения XPath, часть 1: оси

Шаги расположения XPath, часть 1: оси В пути расположения ancestor::NAME, адресующем элемент <NAME>, который является предком контекстного узла, ancestor выступает осью. XPath поддерживает много различных осей, ниже приведен полный список:• ось ancestor содержит предков (ancestor) контекстного

Шаги расположения XPath, часть 2: условия узлов

Шаги расположения XPath, часть 2: условия узлов При создании образцов в качестве условий узлов (node test) можно использовать имена узлов или символ подстановки * для выбора любого узла элемента. Например, выражение child::*/child::NAME выбирает все элементы <NAME>, являющиеся правнуками

Шаги расположения XPath, часть 3: предикаты

Шаги расположения XPath, часть 3: предикаты Предикат в шаге расположения XPath сам содержит заключенное в скобки выражение XPath, которое вычисляется в истину или ложь. Когда результатом вычисления выражения является строка, XPath считает ее истиной, если строка не пуста. Когда

Примеры путей расположения

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

Фиксация расположения окна браузера

Фиксация расположения окна браузера Другой возможностью, которую предоставляет реестр Windows, является возможность запрета сохранения настроек высоты и ширины окна браузера, а также его расположения на экране. Самым простым способом, с помощью которого это можно сделать,

Допуски формы и расположения

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

Урок 13 Пути с фигурами, или Фигуры среди путей

Урок 13 Пути с фигурами, или Фигуры среди путей Растровый редактор Photoshop не был бы столь велик и могуч, если бы его пользователи, помимо работы с растровыми объектами, не могли редактировать еще и нерастровые. Работу с текстом мы уже изучили. В этом уроке мы узнаем, как

2.2.9.2 Прозрачность расположения данных

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

17.7. Создание путей

17.7. Создание путей Постановка задачи Необходимо иметь возможность нарисовать в графическом контексте любой желаемый

Порядок расположения объектов

Порядок расположения объектов Когда объектов в публикации мало – немного и проблем. Но когда вы буквально сталкиваете ваши картинки-надписи нос к носу, они, натурально, начинают яростно спорить на вечную тему – кто главный? Вот на визитке вольготно развалилась цветная

Допуски формы и расположения

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

Настройка путей

Изменение путей к папкам

Изменение путей к папкам Возможности системного реестра позволяют изменять пути к системным и специальным папкам (например, Документы, Рабочий стол, Шаблоны и др.). Для этого предназначены параметры строкового типа разделов HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders либо

Модель DOM содержит методы, позволяющие использовать навигацию языка XPath для запроса данных в модели DOM. Язык XPath используется для поиска конкретного одиночного узла или всех узлов, соответствующих некоторым условиям.

Методы выбора XPath

Классы DOM предоставляют два способа выбора XPath: метод SelectSingleNode и метод SelectNodes. Метод SelectSingleNode возвращает первый узел, соответствующий критериям выбора. Метод SelectNodes возвращает список XmlNodeList, содержащий соответствующие узлы.

В следующем примере метод SelectSingleNode используется для выбора первого узла book , в котором фамилия автора соответствует указанному критерию. Файл bookstore.xml (приведенный в конце этого раздела) используется в качестве входного файла.

В следующем примере метод SelectNodes используется для выбора всех узлов для книг, где цена превышает указанное значение. Затем цена каждой из книг в списке выборки программным способом уменьшается на 10 %. Наконец, файл с внесенными изменениями выводится на консоль. Файл bookstore.xml (приведенный в конце этого раздела) используется в качестве входного файла.

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

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

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

Пространства имен в выражениях XPath

Выражения XPath могут включать пространства имен. Разрешение пространства имен поддерживается с помощью объекта XmlNamespaceManager. Если выражение XPath содержит префикс, этот префикс вместе с URI-кодом пространства имен необходимо добавить к объекту XmlNamespaceManager, и объект XmlNamespaceManager передается методу SelectNodes(String, XmlNamespaceManager) или SelectSingleNode(String, XmlNamespaceManager). Обратите внимание, что вышеприведенные примеры кода пользуются диспетчером XmlNamespaceManager для разрешения пространства имен документа bookstore.xml.

Если выражение XPath не содержит префикс, предполагается, что URI-код пространства имен указывает на пустое пространство имен. Если XML включает пространство имен по умолчанию, необходимо добавить префикс вместе с URI-кодом пространства имен к объекту XmlNamespaceManager, в противном случае невозможно будет выбрать узлы.

XPath (путь XML) — это выражение, которое используется для поиска элемента или, скажем, узла в документе XML. В Selenium он обычно используется для поиска веб-элементов.

Пример:


XML-код:

xml version = "1.0" encoding = "UTF-8" ?>

book category = "Math" >

title lang = "en" >IIT Mathematics title >

author >A Das Gupta author >

book category = "Chemistry" >

title lang = "en" > Inorganic chemistry for JEE title >

author >V K Jaiswal author >

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

Синтаксис XPath:

Выражения XPath:

SymbolDescription
//Selects nodes in the document from the current node that match the selection no matter where they are
/Selects the root node
tagnameTag name of the current node
@Select the attribute
attributeAttribute name of the node
valueValue of the attribute

Типы XPath:



Обычно используемые функции XPath:

Содержит (): эта функция используется для выбора узла, в котором указанное значение атрибута содержит указанную строку, указанную в аргументе функции.
Пример:


start-with (): эта функция используется для выбора узла, указанное значение атрибута которого начинается с указанного строкового значения, указанного в аргументах функции.
Пример:


text (): эта функция используется для поиска узла, имеющего точное совпадение с указанным строковым значением в функции.
Пример:


Использование И и ИЛИ в XPath
И и ИЛИ используются для объединения двух или более условий, чтобы найти узел.
Пример:

Читайте также: