Парсер

Осуществляет разбор различных структур данных для выделения необходимого результата. Может работать с
- 
JSON-структурами 
- 
XML-структурами 
- 
HTML- структурами 
- 
текстовыми документами 
На уровне сценария могут быть организованы циклы и условия. Наиболее частое использование для разбора ответов от компонентов Web-запрос, Монитор и Операция.
 
| Название | Описание | 
|---|---|
| Документ | Аргумент, содержащий структуру, подлежащую разбору. | 
| Алгоритм | 
 | 
| Поисковый запрос | Строка с поисковым запросом для выбранного алгоритма. Подробно описано в Правила поиска различных алгоритмов Парсера | 
| Функция | В зависимости от алгоритма используются различные функции. Подробнее в Функции различных алгоритмов Парсера | 
| Номер элемента | (только для алгоритма Регулярные выражения) Указывает индекс элемента в списке элементов, обнаруженных по шаблону в исходном документе. Нумерация начинается с 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"
        }
      ]
    }
  ]
}| Запрос | Функция | Результат | 
|---|---|---|
| 
 | Содержимое | uvajoqnx0qcpbjoflxr | 
| Количество элементов | 1 | |
| 
 | Содержимое | 8257 | 
| Количество элементов | 1 | |
| 
 | Содержимое |  | 
| Количество элементов | 2 | |
| 
 | Список ключей | ["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>| Запрос | Функция | Результат | 
|---|---|---|
| 
 | Документ |  | 
| 
 | Документ |  | 
| 
 | Документ |  | 
| Содержимое |  | |
| Значение атрибута. | readwrite | |
| Имя атрибута. | 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>| Запрос | Функция | Результат | 
|---|---|---|
| 
 | Документ |  | 
| Содержимое |  | |
| Количество элементов | 1 | |
| Значение атрибута. | x1 | |
| 
 | Количество атрибутов | 2 | 
| 
 | Документ |  | 
| 
 | Документ |  | 
| 
 | Документ |  | 
| 
 | Содержимое | zxcv zxcv |