Работаем с 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` БЫЛИ ЗАМЕНЕНЫ НА ИХ СОДЕРЖИМОЕ
В следующей главе мы узнаем как манипулировать аттрибутами нод.