Работаем с DOM структурой

Разделение блока

В ряде случаев вам может понадобиться разделить содержимое блока на несколько блоков, чтобы в дальнейшем пройти в каждый из таких блоков и распарсить содержимое. Например, какие-то параметры забираемого объекта могут быть перечислены через запятую в определенном блоке, или же разделены тегом <br>. В этом случае вам поможет команда split. Она может работать в двух контекстах: текстовом и HTML. В текстовом контексте она работает с содержимым всех текстовых нод текущего блока, а в HTML контексте - с HTML содержимым текущего блока. Результатом работы команды будет новый блок, в контекст которого автоматически перейдет диггер.

В команде используются следующие параметры:

Параметр Описание
context Задает значение контекста, в котором будет работать команда: text или html.
delimiter Разделитель, который будет использован для разделения содержимого на блоки.

В качестве примера возьмем HTML код:

          <div>
    <p>Some text</p>
    <br/>
    <p>Some,other,text with 
    comma 
    and
    newline</p>
</div>
          

Примеры использования команды:

              - find:
    path: div > p:contains(",")
    do:
    - split:
        context: text
        delimiter: ","

    # В ДАННЫЙ МОМЕНТ МЫ ПЕРЕЙДЕМ В НОВЫЙ БЛОК
    # СОЗДАННЫЙ КОМАНДОЙ `split` С HTML СОДЕРЖИМЫМ:
    # <div class="splitted element_0">Some</div>
    # <div class="splitted element_1">other</div>
    # <div class="splitted element_2">text with comma and newline</div>
    
    # ВЫПОЛНИМ ПОИСК И НАЙДЕМ ПОСЛЕДНИЙ ЭЛЕМЕНТ
    - find:
        path: .splitted
        slice: -1
        do:
        - parse

        # РЕГИСТР СОДЕРЖИТ: text with comma and newline
              
              - find:
    path: div 
    do:
    - split:
        context: html
        delimiter: <br/>

    # В ДАННЫЙ МОМЕНТ МЫ ПЕРЕЙДЕМ В НОВЫЙ БЛОК
    # СОЗДАННЫЙ КОМАНДОЙ `split` С HTML СОДЕРЖИМЫМ:
    # <div class="splitted element_0"><p>Some text</p></div>
    # <div class="splitted element_1"><p>Some,other,text with comma and newline</p></div>

    # ВЫПОЛНИМ ПОИСК И НАЙДЕМ ПОСЛЕДНИЙ ЭЛЕМЕНТ
    - find:
        path: .splitted
        slice: -1
        do:
        - parse

        # РЕГИСТР СОДЕРЖИТ: Some,other,text with comma and newline
              

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