Справка
Работа с 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 = $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 = $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>'
[$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] - формирование нового массива
$class ^ value.explode('>')[0].gettag('class="','"').explode(' ')
).map(
value.explode('>').del(0).implode('>')
)]
где
[$html] - исходный HTML код
[$class] - искомый класс
[$ps] - массив содержимых искомых параграфов
[.sel] - оператор фильтрации массива, в котором [value] - текущий перебираемый элемент
[^] - оператор присутствия элемента в массиве (аналог in)
[.map] - формирование нового массива
При желании к Е5 можно подключить PHPQuery или аналоги.
Читать далее про "Примеры решаемых задач"