Xpoint
   [напомнить пароль]

Парсер для обработки тагов HTML-страницы

Метки: [без меток]
2007-10-28 13:55:47 [обр] tcolonel[досье]

Всем привет,

прошу Вас помочь в одной деликатной ситуации. Ситуация такая:

есть некоторый текст из N символов. В этом тексте содержатся разные таги (<table>, <tr>, <td>, <img>, <a>). Нужно этот текст разделить на несколько равных частей, т.е сделать постраничный вывод для этого текста. Возникают такие ситуации, когда при разделении текста половина тага находится в одной части, другая половина находится в другой. Чтобы этого избежать, нужно обрабатывать эти таги. Может быть кто-нибудь подскажет, есть ли готовые решения подобных парсеров или же может кто делал что-то подобное. Буду признателен за любую информацию.

Разделять нужно для постраничного вывода на экран, ну и для печати - тоже.

Например, у нас есть статья из 10000 символов (в ней содержатся <img>, <table>, etc.). Нам нужно разделить статью на страницы, длина страницы 1000 символов, т.е получается в итоге 10 страниц. А теперь, допустим, при копировании первых 1000 символов, мы попали в то место, где обрываются теги <img>, <table>, <tr>, <td>, <b>, <strong>.

Суть парсера в том, что при копировании 1000 символов, он проверяет не обрезал ли он таг. Если обрезал, то длина страницы уменьшается или увеличивается до последнего закрывающего тега на этой странице.

Так понятнее ?

Спасибо.

спустя 2 часа 3 минуты [обр] Marat Tanalin(3/78)[досье]
DOM
спустя 3 часа 35 минут [обр] tcolonel[досье]
Речь ведь идет о чистом HTML. Может быть я что-то не понимаю. Не могли бы Вы пояснить ?
спустя 38 минут [обр] Marat Tanalin(3/78)[досье]

Если кратко — создаём объект DomDocument, загружаем в него HTML-документ при помощи удобного метода loadHTML, получаем дерево узлов, делаем с ним всё, что хотим, при помощи стандартных методов W3C DOM Level 3, сохраняем изменённое DOM-дерево в виде HTML методом saveHTML (для обычного HTML) или saveXML (для XHTML).

Речь, конечно, о расширении DOM в рамках PHP 5, не о DOM XML в рамках PHP 4, хотя и последнее (использующее собственные, нестандартные методы и, насколько мне известно, не имеющее метода для загрузке HTML-кода, не являющегося корректным XML), наверное, на что-то подобное способно.

спустя 1 минуту [обр] Marat Tanalin(3/78)[досье]
опечатка: загрузке -> загрузки
спустя 45 минут [обр] tcolonel[досье]

что - то я попробовал и ничего не работает ...

можеет показать простейший пример ?

допустим текст на входе равен: $html = '<p>Уважаемые абоненты,
Предлагаем Вам воспользоваться услугой <b>"КОММУТИРУЕМЫЙ ДОСТУП В ИНТЕРНЕТ"</b> с использованием модемного пула 600-7000, число соединительных линий на котором увеличено до 6800.
За счёт хорошей связи модемного пула 600-7000 со всеми узлами Городской Телефонной Сети качество соединений существенно возрастет, а мощности нового модемного пула позволят обеспечить устойчивое подключение всех абонентов компании "КОМСТАР-Директ", пользующихся коммутируемым доступом.
В целях работоспособности услуг: обратный вызов (call-back), дополнительные входные имена, а также для доступа абонентов из Московской области будут сохранены номера модемных пулов 105-5555, 995-5555 и 995-5556.</p><p><img src="../ads.jpg" alt="" width="758" height="535" border="0"><a href="#">Test link</a>This is a test ... <b>This is a bold text</b></p>';

при резании я попадаю в тег <img> ... как сделать чтобы парсер резал уже после тега <img>

Спасибо

спустя 10 дней [обр] Владимир Лучанинов[досье]
можно делать strip_tags($text, '<p><a><b><i><br>'), чтобы вырезать неподходящие для аннотаций элементы,
обрезать текст,
а потом с помощью tidy закрыть незакрытые теги.
Powered by POEM™ Engine Copyright © 2002-2005