Парсер

Парсер

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

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

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

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

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

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

parserEdit
Рис. 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