Справка

Работа с HTML тегами


Поиск HTML элементов через CSS селекторы, это пожалуй самый удобный способ работы с HTML тегами.

Для frontend-а с этой задачей прекрасно справляется JQuery, а для серверной части приходится искать аналоги, вроде PHPQuery, DomCrawler, htmlSQL, XPath и т.д.

Если JQuery работает сразу с готовым документом, то результат сгенерированный серверной частью (компиляция изменённого DOM-а) может отличаться от исходного, т.к. проходит процесс декомпиляции HTML и последующей компиляции.

Методы работы с HTML тегами в Е5

[$tag = $html.gettag('<p>','</p>')]
Выдаст первое вхождение между открывающим и закрывающим тегом (или их частями)
[$tag = $html.gettag_next('<p>','</p>')]
Выдаёт следующее вхождение, либо [false]
[$tags = $html.gettag_all('<p>','</p>')]
Выдаёт массив вхождений между тегами.
[$tags = $html.deltag('<p>','</p>')]
Удаляет теги вместе с их содержимым.
[$html = $html.replace_tag('<p>','</p>','some text')]
Заменяет содержимое тегов на 'some text'.

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

Например:
[$html = '<p>Иван</p><p>Марья</p>']
[$html = $html.replace_tag('<p>','</p>','%data% Глинко')]
Результатом будет: '<p>Иван Глинко</p><p>Марья Глинко</p>'

Также можно указать два аргумента - очистка тегов и строку исключение.
Если указать очистку тегов, то старое содержимое будет заменено вместе с тегами, в которых оно было найдено.

Например:
[$html = '<p>Иван</p><p>Марья</p>']
[$html = $html.replace_tag('<p>','</p>','123',true)]
Получим результат: '123123'

Второй аргумент - строка исключение. Если эта строка будет найдена в содержимом тега, то этот тег останется нетронутым.

Например:
[$html = '<p>Иван</p><p>Марья</p>']
[$html = $html.replace_tag('<p>','</p>','123',false,'Марья')]
Получим результат: '<p>123</p><p>Марья</p>'

Подробнее прочитать про метод replace_tag можно в разделе API: replace_tag

Дополнительные операции с HTML


Метод [.cascade] позволит выровнять HTML код.
Метод [.autoclose] закроет незакрытые HTML теги.
Метод [.clear] очищает HTML теги.
Метод [.astext] превращает HTML теги в текст.

Поиск содержимого HTML тега по ID или имени класса

Попробуем найти параграф по ID
[$p = $html.gettag_all('<p','</p>').sel(value.contain('id="'++$id++'"')).first]

Поиск по классу чуть сложнее, т.к. классов у элемента может быть несколько
[$ps = $html.gettag_all('<p','</p>').sel(
    $class ^ value.explode('>')[0].gettag('class="','"').explode(' ')
).map(
    value.explode('>').del(0).implode('>')
)]


где
[$html] - исходный HTML код
[$class] - искомый класс
[$ps] - массив содержимых искомых параграфов

[.sel] - оператор фильтрации массива, в котором [value] - текущий перебираемый элемент
[^] - оператор присутствия элемента в массиве (аналог in)
[.map] - формирование нового массива

При желании к Е5 можно подключить PHPQuery или аналоги.

Читать далее про "Примеры решаемых задач"