Компонент Парсер

Описание

Осуществляет разбор любых текстовых структур. Может использоваться метод регулярных выражений, метод поиска по JSON, встроенный анализатор гипертекста. Согласно строке поиска формирует ответ, либо вырезает запрошенный раздел или их совокупность, либо определяет количество элементов в указанном разделе структуры. Сложные структуры могут быть разобраны последовательностью элементов «Парсер», каждый из которых выделяет из документа некоторую структуру и возвращает ее для передачи на вход следующего элемента.

Разобранная структура документа кэшируется в конкретном экземпляре обработчика сценариев для ускорения работы с одним большим документом последовательных элементов «Парсер».

Table 1. Системные характеристики

Индекс

125

Краткое название

parse

Типы сценариев

Все

Стартовый модуль

r_script_component_parse

Режим

Синхронный

Иконка

125

Характер разветвления

Разветвляющий, замыкающий

Свойства

Table 2. Свойства
Спецификация Описание

Название: Документ
Код: data
Усл. видимости: нет
По умолчанию: — 

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

Название: Алгоритм
Код: algoritm
Усл. видимости: нет
По умолчанию: Регулярные выражения

Алгоритм разбора.
Возможные варианты:

  • Парсер json (json, 0) – Применяет алгоритм поиска в JSON структуре (объекте или массиве). Примеры поисковых запросов ниже.

  • Парсер XML (xml, 1) – Применяет алгоритм поиска в XML документе. Примеры поисковых запросов ниже.

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

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

Название: Поисковый запрос
Код: query
Усл. видимости: нет
По умолчанию: — 

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

Название: Функция
Код: functionJSON
Усл. видимости: да
По умолчанию: Количество элементов

Функция для алгоритма Парсер JSON.
Возможные варианты:

  • Содержимое (content, 0) – Возвращает обнаруженный элемент вместе с содержимым.

  • Восстановленное содержимое (restoreContent, 1) –

  • Количество элементов (count, 2) – Возвращает количество найденных элементов.

  • Список ключей (keys, 3) – Возвращает список ключей в найденном объекте.

Название: Функция
Код: functionXML
Усл. видимости: да
По умолчанию: Количество элементов

Функция для алгоритма Парсер XML.
Возможные варианты:

  • Документ (textContent, 0) – Возвращает выбранный элемент целиком вместе с содержимым.

  • Содержимое (content, 1) – Возвращает содержимое выбранного элемента, исключая сам элемент.

  • Количество элементов (count, 2) – Возвращает количество обнаруженных элементов.

  • Значение атрибута (attributeValue, 3) – Возвращает значение указанного атрибута выбранного элемента.

  • Имя атрибута (attributeKey, 4) – Возвращает имя атрибута по его индексу в выбранном элементе.

  • Количество атрибутов (attributeCount, 5) – Возвращает количество атрибутов в выбранном элементе.

Название: Функция
Код: functionREGULAR
Усл. видимости: да
По умолчанию: Количество групп

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

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

  • Количество элементов (countElements, 1) – Возвращает количество обнаруженных элементов, соответствующих поисковому шаблону.

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

Название: Функция
Код: functionHTML
Усл. видимости: да
По умолчанию: Количество элементов

Функция для алгоритма Парсер HTML.
Возможные варианты:

  • Документ (textContent, 0) – Возвращает выбранный элемент целиком вместе с содержимым.

  • Содержимое (content, 1) – Возвращает содержимое выбранного элемента, исключая сам элемент.

  • Количество элементов (count, 2) – Возвращает количество обнаруженных элементов.

  • Значение атрибута (attributeValue, 3) – Возвращает значение указанного атрибута выбранного элемента.

  • Имя атрибута (attributeKey, 4) – Возвращает имя атрибута по его индексу в выбранном элементе.

  • Количество атрибутов (attributeCount, 5) – Возвращает количество атрибутов в выбранном элементе.

Название: Номер элемента
Код: elementNumber
Усл. видимости: да
По умолчанию: — 

Параметр для алгоритма Регулярные выражения. Указывает индекс элемента в списке элементов, обнаруженных по шаблону в исходном документе.

Название: Номер группы
Код: groupNumber
Усл. видимости: да
По умолчанию: — 

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

Например, в документе мама мыла раму, а лена сидела шаблон (.)а([^ ])* обнаружит 7 элементов, в каждом из которых доступны 3 группы: 0, 1, 2. Для элемента 4 группа 0раму, 1р, 2му.

Название: Номер атрибута
Код: attributeNumber
Усл. видимости: да
По умолчанию: — 

Параметр для алгоритмов xml и html.

Название: Имя атрибута
Код: attributeName
Усл. видимости: да
По умолчанию: — 

Параметр для алгоритмов xml и html.

Название: Результат в переменную
Код: resultVariable
Усл. видимости: нет
По умолчанию: — 

Переменная для сохранения результата операции.

Название: Еще запросы
Код: operations
Усл. видимости: нет
По умолчанию: — 

Список последовательно выполняющихся дополнительных запросов и присвоений результатов в переменную.
Каждое значение в таблице представляет собой поисковый запрос (аналог поля query).

Если поле заполнено, то сначала выполняется основной запрос, а затем с теми же параметрами все дополнительные запросы.
Результат каждого присваивается в соответствующую ему переменную в таблице.
Если какой-то запрос завершается неудачей, то:

  • Компонент завершится по ветке неудачи.

  • В переменную об ошибке будет присвоен текст ошибки, дополненный префиксом с номером операции, например "Operation 3. Error text". Основной операции соответствует индекс 0.

  • Переменные предыдущих выполненных запросов будут заполнены, а последующих запросов - нет.

Название: Ошибка в переменную
Код: errorVariable
Усл. видимости: нет
По умолчанию: — 

Переменная для сохранения ошибки.

Название: Переход
Код: transfer
Усл. видимости: нет
По умолчанию: — 

Компонент, которому передается управление при успешном завершении операции.

Название: Переход, ошибка
Код: transferError
Усл. видимости: нет
По умолчанию: — 

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

Примеры

Алгоритм JSON

Обзор

  • При парсинге массива объектов можно указывать фильтр в (key:value), только объекты с наличием указанной пары ключ-значения будут использованы для дальнейшего парсинга. Фильтр может быть только по одной паре ключ-значение. Например: "msgs"("msgSender":"ab"), "msgs" – содержит массив объектов из которых будут выбраны объекты с наличием свойства "msgSender"="ab".

  • Нумерация элементов массива начинается с 0.

Пример документа 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"
        }
      ]
    }
  ]
}
Table 3. Примеры запросов JSON
Поисковый запрос Функция Результат

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.okteller.ru" label="x.okteller.ru" path="c:\rtx_mg3\Media\domains\x.okteller.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="okteller.ru" label="okteller.ru" path="c:\rtx_mg3\Media\domains\okteller.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="Common" label="Common" path="c:\rtx_mg3\Media\common" 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" name="Pavel" compression="metadata" introducer="false">
        <address>dynamic</address>
    </device>
    <gui enabled="true" tls="false" debugging="false">
        <address>127.0.0.1:8384</address>
        <apikey>jeopL9MghPvTmweKDeGcoXhwRtrdaVDP</apikey>
        <theme></theme>
    </gui>
    <options>
        <globalAnnounceEnabled>false</globalAnnounceEnabled>
        <localAnnounceEnabled>false</localAnnounceEnabled>
        <localAnnouncePort>21027</localAnnouncePort>
        <localAnnounceMCAddr></localAnnounceMCAddr>
        <maxSendKbps>0</maxSendKbps>
        <maxRecvKbps>0</maxRecvKbps>
        <reconnectionIntervalS>60</reconnectionIntervalS>
        <relaysEnabled>false</relaysEnabled>
        <relayReconnectIntervalM>10</relayReconnectIntervalM>
        <startBrowser>false</startBrowser>
        <natEnabled>false</natEnabled>
        <natLeaseMinutes>60</natLeaseMinutes>
        <natRenewalMinutes>30</natRenewalMinutes>
        <natTimeoutSeconds>10</natTimeoutSeconds>
    </options>
</configuration>
Table 4. Примеры запросов XML
Поисковый запрос Функция Результат

"configuration"/0/"folder"

Документ

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

.

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

Документ

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

.

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

Документ

<folder id="x.rootdomain.ru" label="x.rootdomain.ru" path="c:\rtx_mg3\Media\domains\x.rootdomain.ru" type="readwrite" rescanIntervalS="10" ignorePerms="false" autoNormalize="true">
    <device id="RXYYDPI-SVKNBMF-YADG7WD"/>
    <minDiskFreePct>1</minDiskFreePct>
    <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>
Table 5. Примеры запросов 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

См. также