Обработка результатов запроса при помощи метода XPath

<< Click to Display Table of Contents >>

Navigation:  Интерфейс редактора проекта > Панель инструментов > Табличное представление проекта >  Работа с результатами запросов >

Обработка результатов запроса при помощи метода XPath

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

XPath позволяет обращаться к конкретным элементам проекта, чтобы получать и обрабатывать их значения.

После получения результата запроса, нужно добавить пользовательский столбец либо с типом Свойство, либо с типом Отношение:

primeri_xpath

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

В поле ввода Имя столбца указывается название для добавляемого столбца. Задается имя столбца, которое будет отображаться в таблице. По умолчанию формируется: XPath выражение/свойство (отношение).

Выражение XPath может иметь следующий вид:

имя

имя[выражение]

переход::имя[выражение]

Имя

Имя - это путь к конкретному элементу. В качестве имени может выступать как программное имя (RefName), так и по имени (DisplayName).

Если выражение начинается со слеша /, то поиск начинается от корневого элемента проекта.

Если Имя содержи точку, то в начале имени надо ставить @.

Чтобы указать выбор любого элемента, можно использовать *.

Важно! Если во вкладке свойств элемента не отображается программное имя, то в Настройках среды, на вкладке Разное нужно поставить флаг у настройки Служебные свойства.

Например, обратимся напрямую к свойству каналов OPC UA - NodeId, выведем значение этого свойства. Для этого выберем Область поиска запроса - В системе, Тип элемента- каналы. Создадим запрос и добавим новый столбец. Выберем тип - Свойство, зададим путь Xpath: Настройки/NodeId, в выпадающем списке свойств выберем - Начальное значение.

primeri_xpath_1

В результате получим:

primeri_xpath_2

Выражение

Имя[выражение] - это фильтр по искомым свойствам.

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

Для формирования условия используются следующие обозначения:

Обозначение

Значение

==

Равенство

!=

Неравенство

and

и

or

или

Примеры условий:

Условие

Значение

RefName == "Value"

RefName равен Value

RefName != "Value"

RefName неравен Value

RefName == "Value" or RefName = "Input"

RefName равен Value или Input

RefName == "Value" and RefName != "Input"

RefName равен Value и неравен Input

В условии программное имя нужно указывать как RefName. Условия составляются по обычным логическим условиям.

Рассмотрим в качестве примера условие для параметров объекта Настройки шкалы/[RefName == "Hi" or RefName == "UseHiHi"]:

primeri_xpath_3

Добавленный столбец будет выглядеть следующим образом:

primeri_xpath_4

По указанному условию происходит обращение к свойствам шкалы параметра. Обращение идет либо к свойству Hi, либо к свойству Использовать HiHi. При таком условии, в качестве результат используется первое найденное значение. Для Параметра 1 это будет свойство Использовать HiHi, а для Параметра 2 Hi.

Переход

Переход - это способ выбора следующего элемента.

Переход задается в формате переход::имя[выражение].

Список всех возможных переходов представлен в таблице:

Переход

Значение

Пример

general

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

Settings/IP адрес

ancestor

Переход на библиотечный тип.

ancestor::/Объект 1/Параметр 1

ungrouped

Поиск дочерних элементов без учета групп.

ungrouped::Settings/Адрес ячейки

parent

Переход к родительскому элементу.

parent::Settings/Адрес ячейки

ungrouped_parent

Переход к родительскому элементу без учета групп.

ungrouped_parent::/Settings/IP адрес

link

Переход по связи. Задается в формате link::@тип связи. Типы связи могут иметь следующий вид:

link::Own (@ указывать не обязательно);

link::@Scheme.InLink (Связь к параметру);

link::@Scheme.OutLink (Связь из параметра);

link::@MasterSCADA.HasType (Имеет тип);

link::@MasterSCADA.ReadValue (Чтения значений);

link::@MasterSCADA.WriteValue (Записи значений);

link::@MasterSCADA.HasScale (Имеет шкалу);

link::@MasterSCADA.HasArchiveTemplate (Шаблон архива).

link::@MasterSCADA.HasScale
Параметр 1/link::@MasterSCADA.HasScale/Maximum

same

Если элемент находится внутри наследника, то находится соответствующий элемент внутри типа. Сначала ищется родитель заданного типа, затем осуществляется переход от него к библиотечному типу, и в этом типе ищется элемент, соответствующему данному.
Задается в следующем виде: /link:тип_элемента_наследника.

same::"MasterSCADA.ObjectOrTagInstance"

Рассмотрим пример поиска значения свойства Максимум у шкалы параметра. Для этого используем выражение link::@MasterSCADA.HasScale/Maximum:

primeri_xpath_5

Добавленный столбец будет выглядеть следующим образом:

primeri_xpath_6

Смотрите также: