<< Click to Display Table of Contents >> Navigation: Интерфейс редактора проекта > Панель инструментов > Табличное представление проекта > Работа с результатами запросов > Обработка результатов запроса при помощи метода XPath |
В табличном представлении проекта, XPath может быть полезным для доступа к конкретным элементам или данным в табличных структурах.
XPath позволяет обращаться к конкретным элементам проекта, чтобы получать и обрабатывать их значения.
После получения результата запроса, нужно добавить пользовательский столбец либо с типом Свойство, либо с типом Отношение:
В поле ввода XPath указывается выражение. Выражения состоит из порядка переходов по элементам полного дерева, разделяемые знаком слеш /.
В поле ввода Имя столбца указывается название для добавляемого столбца. Задается имя столбца, которое будет отображаться в таблице. По умолчанию формируется: XPath выражение/свойство (отношение).
Выражение XPath может иметь следующий вид:
•имя
•имя[выражение]
•переход::имя[выражение]
Имя - это путь к конкретному элементу. В качестве имени может выступать как программное имя (RefName), так и по имени (DisplayName).
Если выражение начинается со слеша /, то поиск начинается от корневого элемента проекта.
Если Имя содержи точку, то в начале имени надо ставить @.
Чтобы указать выбор любого элемента, можно использовать *.
Важно! Если во вкладке свойств элемента не отображается программное имя, то в Настройках среды, на вкладке Разное нужно поставить флаг у настройки Служебные свойства.
Например, обратимся напрямую к свойству каналов OPC UA - NodeId, выведем значение этого свойства. Для этого выберем Область поиска запроса - В системе, Тип элемента- каналы. Создадим запрос и добавим новый столбец. Выберем тип - Свойство, зададим путь Xpath: Настройки/NodeId, в выпадающем списке свойств выберем - Начальное значение.
В результате получим:
Имя[выражение] - это фильтр по искомым свойствам.
После указания имени можно поставить открывающую квадратную скобку [ и указать условие по которым нужно фильтровать элементы. После написания условия нужно закрыть выражение, прописав закрывающую квадратную скобку ].
Для формирования условия используются следующие обозначения:
Обозначение |
Значение |
== |
Равенство |
!= |
Неравенство |
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"]:
Добавленный столбец будет выглядеть следующим образом:
По указанному условию происходит обращение к свойствам шкалы параметра. Обращение идет либо к свойству 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 |
same |
Если элемент находится внутри наследника, то находится соответствующий элемент внутри типа. Сначала ищется родитель заданного типа, затем осуществляется переход от него к библиотечному типу, и в этом типе ищется элемент, соответствующему данному. |
same::"MasterSCADA.ObjectOrTagInstance" |
Рассмотрим пример поиска значения свойства Максимум у шкалы параметра. Для этого используем выражение link::@MasterSCADA.HasScale/Maximum:
Добавленный столбец будет выглядеть следующим образом:
Смотрите также:
Настройка таблицы результатов запроса
Поиск и замена значений в таблице результатов запросов