Представьте такую парсилку:

1. Сначала разобрать HTML-документ на линейную последовательность тегов. Тег - имя + набор атрибутов. Иерархии нет. Закрывающий тег - тупо отдельное имя в той же плоской последовательности.

2. Рассмотреть всю эту последовательность как строку символов, где символ - тег.

3. Сделать regexp-машинку, которая оперирует не символами текста, а тегами. В таком духе:

// заматчить любую пару тегов <TD> + </TD> с любыми тегами между ними.
TD, * *, /TD


// то же самое, но только <TD> имеющий атрибут "hello" равный 123
TD hello=="123", * *, /TD

// можно замутить встроенный язык с переменными
// При встрече тега HTML создать i = 0
// Пропустить сколько угодно каких угодно тегов
// заматчить много последовательностей <TD> ... </TD>
// При матчинге очередного TD инкрементнуть переменную
// В итоге мы посчитаем число пар <TD>...</TD> заодно.

HTML $i=0, * *, (TD $i++, * *, /TD)*

Не будет ли такое быстрее, чем построение в памяти всего DOM-дерева и исполнение на этом дереве XPath-запросов?








 






URL записи