Парсер

На этой странице

Осуществляет разбор различных структур данных для выделения необходимого результата. Может работать с

  • JSON-структурами

  • XML-структурами

  • HTML- структурами

  • текстовыми документами

На уровне сценария могут быть организованы циклы и условия. Наиболее частое использование для разбора ответов от компонентов Web-запрос, Монитор и Операция.

Рис. 1. Парсер

Название

Описание

Документ

Аргумент, содержащий структуру, подлежащую разбору.

Алгоритм

  • Парсер JSON – Применяет алгоритм поиска в JSON структуре.

  • Парсер XML - Применяет алгоритм поиска в XML документе.

  • Регулярные выражения – Применяет стандартный алгоритм регулярных выражений. Осуществляет поиск элементов по поисковому шаблону. В общем случае обнаруживает несколько элементов. Для выдачи содержимого необходимо указать номер элемента и номер группы (если в шаблоне используется захват групп).

  • Парсер HTML – Применяет алгоритм поиска в HTML документе. Синтаксис описан в . Допускает отсутствие закрывающих тегов (в отличие от XML).

Поисковый запрос

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

Функция

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

Номер элемента

(только для алгоритма Регулярные выражения) Указывает индекс элемента в списке элементов, обнаруженных по шаблону в исходном документе. Нумерация начинается с 0.

Номер группы

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

Номер атрибута

(только для алгоритмов xml и html) Указывает номер атрибута

Имя атрибута

(только для алгоритмов xml и html) Указывает имя атрибута

Результат в переменную

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

Ошибка в переменную

Переменная, в которую сохраняется текст ошибки.

Переход

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

Переход, ошибка

Компонент, на который передается управление в случае ошибки

Описание

Описание компонента

Функции различных алгоритмов Парсера

Функция для алгоритма Парсер JSON.

Вариант

Описание

Содержимое

Возвращает обнаруженный элемент вместе с содержимым.

Восстановленное содержимое

В ответе убраны внешние признаки JSON элемента

Количество элементов

Возвращает количество найденных элементов.

Список ключей

Возвращает список ключей в найденном объекте.

Функция для алгоритма Парсер XML.

Вариант

Описание

Документ

Возвращает выбранный элемент целиком вместе с содержимым.

Содержимое

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

Количество элементов

Возвращает количество обнаруженных элементов.

Значение атрибута

Возвращает значение указанного атрибута выбранного элемента.

Имя атрибута

Возвращает имя атрибута по его индексу в выбранном элементе.

Количество атрибутов

Возвращает количество атрибутов в выбранном элементе.

Функция для алгоритма Регулярные выражения.

Вариант

Описание

Содержимое

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

Количество элементов

Возвращает количество обнаруженных элементов, соответствующих поисковому шаблону.

Количество групп

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

Функция для алгоритма Парсер HTML.

Вариант

Описание

Документ

Возвращает выбранный элемент целиком вместе с содержимым.

Содержимое

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

Количество элементов

Возвращает количество обнаруженных элементов.

Значение атрибута

Возвращает значение указанного атрибута выбранного элемента.

Имя атрибута

Возвращает имя атрибута по его индексу в выбранном элементе.

Количество атрибутов

Возвращает количество атрибутов в выбранном элементе.

Правила поиска различных алгоритмов Парсера

Алгоритм JSON

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

Пример исходного json

{ "result": "ok", "errormsg": "", "chat": [ { "sessId": "uvajoqnx0qcpbjoflxr", "msgs": [ { "msgId": 8255, "msgDt": 1491292390, "msgData": { "type": "text", "data": "Добрый день. Выберите интересующий Вас вопрос." }, "msgSender": "op" }, { "msgId": 8256, "msgDt": 1491292391, "msgData": { "type": "buttons", "data": "Связаться с usr 6" }, "msgSender": "ab" }, { "msgId": 8257, "msgDt": 1491292392, "msgData": { "type": "buttons", "data": "Связаться с usr 8" }, "msgSender": "ab" } ] } ] }

Запрос

Функция

Результат

"chat"/0/"sessId"

Содержимое

uvajoqnx0qcpbjoflxr

Количество элементов

1

"chat"/0/"msgs"("msgSender":"ab")/1/"msgId"

Содержимое

8257

Количество элементов

1

"chat"/0/"msgs"("msgSender":"ab")

Содержимое

[ { "msgId": 8256, "msgDt": 1491292391, "msgData": { "type": "buttons", "data": "Связаться с usr 6" }, "msgSender": "ab" }, { "msgId": 8257, "msgDt": 1491292392, "msgData": { "type": "buttons", "data": "Связаться с usr 8" }, "msgSender": "ab" } ]

Количество элементов

2

"chat"/0

Список ключей

["sessId","msgs"]

Алгоритм XML

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

<configuration version="16"> <folder id="x.demo.oktell.ru" label="x.demo.oktell.ru" path="c:\rtx_mg3\Media\domains\x.demo.oktell.ru.ru" type="readwrite" rescanIntervalS="10" ignorePerms="false" autoNormalize="true"> <device id="RXYYDPI-SVKNBMF-YADG7WD"></device> <minDiskFreePct>1</minDiskFreePct> <versioning></versioning> <copiers>0</copiers> <pullers>0</pullers> <hashers>0</hashers> <order>random</order> </folder> <folder id="demo.oktell.ru" label="demo.oktell.ru" path="c:\rtx_mg3\Media\domains\demo.oktell.ru" type="readwrite" rescanIntervalS="10" ignorePerms="false" autoNormalize="true"> <device id="RXYYDPI-SVKNBMF-01020304"></device> <minDiskFreePct>1</minDiskFreePct> <versioning></versioning> <copiers>0</copiers> <pullers>0</pullers> <hashers>0</hashers> <order>random</order> </folder> <gui enabled="true" tls="false" debugging="false"> <address>127.0.0.1:8384</address> <apikey>jeopL9MghPvTmweKDeGcoXhwRtrdaVDP</apikey> <theme></theme> </gui> </configuration>

Запрос

Функция

Результат

"configuration"/0/"folder"

Документ

<folder id="x.demo.oktell.ru" label="x.demo.oktell.ru" path="c:\rtx_mg3\Media\domains\x.demo.oktell.ru.ru" type="readwrite" rescanIntervalS="10" ignorePerms="false" autoNormalize="true"> <device id="RXYYDPI-SVKNBMF-YADG7WD"></device> <minDiskFreePct>1</minDiskFreePct> <versioning></versioning> <copiers>0</copiers> <pullers>0</pullers> <hashers>0</hashers> <order>random</order> </folder> <folder id="demo.oktell.ru" label="demo.oktell.ru" path="c:\rtx_mg3\Media\domains\demo.oktell.ru" type="readwrite" rescanIntervalS="10" ignorePerms="false" autoNormalize="true"> <device id="RXYYDPI-SVKNBMF-YADG7WD"></device> <minDiskFreePct>1</minDiskFreePct> <versioning> </versioning> <copiers>0</copiers> <pullers>0</pullers> <hashers>0</hashers> <order>random</order> </folder>

"configuration"/0/"folder"("id":"x.demo.oktell.ru")/0/"device"/0/

Документ

<device id="RXYYDPI-SVKNBMF-YADG7WD"/>

"configuration"/0/"folder"("id":"x.demo.oktell.ru")

Документ

<folder id="x.demo.oktell.ru" label="x.demo.oktell.ru" path="c:\rtx_mg3\Media\domains\x.demo.oktell.ru.ru" type="readwrite" rescanIntervalS="10" ignorePerms="false" autoNormalize="true"> <device id="RXYYDPI-SVKNBMF-YADG7WD"></device> <minDiskFreePct>1</minDiskFreePct> <versioning> </versioning> <copiers>0</copiers> <pullers>0</pullers> <hashers>0</hashers> <order>random</order> </folder>

Содержимое

<device id="RXYYDPI-SVKNBMF-YADG7WD"/> <minDiskFreePct>1</minDiskFreePct> <versioning/> <copiers>0</copiers> <pullers>0</pullers> <hashers>0</hashers> <order>random</order>

Значение атрибута.
Имя атрибута: "type"

readwrite

Имя атрибута.
Номер атрибута: 1

id

Количество атрибутов

7

Алгоритм HTML

Общие правила:

  • Поиск по наименованию тега в двойных кавычках, например, "br"

  • Последовательность тегов формируется разделителем |, например, "html"|"head"|"title"

  • Получения одного из одинаковых тегов производится добавлением индекса после разделителя тега (начиная с нуля), например, "html"|"br"|1|"title"

  • По умолчанию переход к поиску следующего тега происходит с выбором нулевого тега.

  • Запрос "html"|0|"head"|0|"title"|0 равносилен запросу "html"|"head"|"title", т.е запрос по имени тега всегда возвращает список.

  • Запрос можно строить по индексам, например, "0|0|1"

  • Для обращений к атрибутам тега используется скобки.

  • Запрос "html"|"head"|("charset") выдаст список родительских тегов "head" в которых присутствует атрибут "charset".

  • Запрос "html"|"head"|("type="test/css") выдаст список родительских тегов "head" в которых атрибут "type" равен "test/css".

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

<HTML> <HEAD> <META a="1" b="2"/> </HEAD> <BODY> <p id="x1" class="abc">abc abc <a href="http://asdf.ru">link</a> <br> </p> <br><br> <p id="x2" class="abc" v="123">zxcv zxcv</p> </BODY> </HTML>

Запрос

Функция

Результат

("id"="x1")

Документ

<p id="x1" class="abc">abc abc <a href="http://asdf.ru">link</a> <br></p>

Содержимое

abc abc <a href="http://asdf.ru">link</a> <br>

Количество элементов

1

Значение атрибута.
Имя атрибута: id

x1

"META"

Количество атрибутов

2

"p"

Документ

<p id="x1" class="abc">abc abc <a href="http://asdf.ru">link</a> <br></p>

"p"|0

Документ

<p id="x1" class="abc">abc abc <a href="http://asdf.ru">link</a> <br></p>

"p"|1

Документ

<p id="x2" class="abc" v="123">zxcv zxcv</p>

"BODY"|"p"|("v")

Содержимое

zxcv zxcv