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

Ноды

Когда диггер работает с документом, с HTML или XML, он работает с его DOM (Domain Object Model) структурой, которая состоит из нод - узлов-элементов этой структуры. При использовании метода find, вы попадаете в найденную ноду и соответсвенно в блоковый контекст. Внутри текущего блока (ноды) могут быть вложенные (дочерние) ноды, а внутри них еще ноды и так далее. Находясь в блоковом контексте, вы можете ограниченно манипулировать нодами текущего блока, удалять или заменять их.

Варианты записи команд для манипулирования нодами:

          # УДАЛИТ ВСЕ НЕ ТЕКСТОВЫЕ НОДЫ В ТЕКУЩЕМ БЛОКЕ
- node_remove_all
        
          # УДАЛИТ ВСЕ НОДЫ `а` В ТЕКУЩЕМ БЛОКЕ
- node_remove: a
        
          # ЗАМЕНИТ ВСЕ НОДЫ `а` НА НОДЫ `p` В ТЕКУЩЕМ БЛОКЕ
- node_replace:
    path: a
    with: <p></p>
        
          # ЗАМЕНИТ ВСЕ НОДЫ `а` НА ЕГО HTML СОДЕРЖИМОЕ В ТЕКУЩЕМ БЛОКЕ
- node_replace:
    path: a
    with: content
        

Возьмем для примера следующий HTML код:

          <div>
    <span>some text</span>
    <a>some link</a>
    <span>another text</span>
</div>
            

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

              - find:
    path: div
    do:
    - node_remove_all
    - parse

    # В РЕГИСТРЕ ПУСТО Т.К. ВСЕ HTML-НОДЫ БЫЛИ УДАЛЕНЫ
              
              - find:
    path: div
    do:
    - node_remove: span
    - parse

    # В РЕГИСТРЕ: some link
    # Т.К. ВСЕ `span` БЫЛИ УДАЛЕНЫ
              
              - find:
    path: div
    do:
    - node_replace: 
        path: span
        with: ' some text '
    - parse

    # В РЕГИСТРЕ: " some text some link some text "
    # Т.К. ВСЕ `span` БЫЛИ ЗАМЕНИНЫ НА " some text "
              
              - find:
    path: div
    do:
    - node_replace: 
        path: span
        with: content
    - parse

    # В РЕГИСТРЕ: some textsome linksome text
    # Т.К. ВСЕ `span` БЫЛИ ЗАМЕНЕНЫ НА ИХ СОДЕРЖИМОЕ
              

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