Форум программистов, компьютерный форум CyberForum.ru

HTML Parser - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Lindemann66
 Аватар для Lindemann66
3 / 3 / 0
Регистрация: 28.04.2010
Сообщений: 162
28.07.2011, 13:29     HTML Parser #1
Всем привет!

Необходимо написать parser содержимого html - в частности, тэгов

Лично я в основу положил обычный проход по html, с поиском начального символа тэга <, определения типа тэга и считывания его содержимого до следующего открывающего, либо закрывающего тэга

Плюс, необходимо учитывать вложенность тэгов
То есть, если ситуация
HTML5
1
<div>текст1 <a>текст2</a> текст3</div>
то в результате должно получиться
div : текст 1 текст2 текст3
div, a : текст 2
a сохраняется, так как у него тип - inside (сам придумал), тк, если не приписывать содержимое тэга а в тэг div, может потеряться смысл содержимого тэга div

Вобщем-то, алгоритм почти реализован, но ситуация с вложенностью в нём обрабатывается плохо...

Может, у кого-то будут какие-то свежие идеи на счёт такого parser'а html?
Буду благодарен за любой ответ!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 13:29     HTML Parser
Посмотрите здесь:

создание html C++
C++ Тэги HTML в C++
Нужны исходники WAP WEB или XML Parser-а C++
C++ Парсинг html
C++ Правила вложенности тегов html (html разметка на С++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 13:43     HTML Parser #2
Цитата Сообщение от Lindemann66 Посмотреть сообщение
Лично я в основу положил обычный проход по html, с поиском начального символа тэга <, определения типа тэга и считывания его содержимого до следующего открывающего, либо закрывающего тэга
я бы сначала получил выражение полностью, а только потом парсил его содержимое
напрмер нашли тэг <div> и парсим далше пока не встретим закрывающий тэг </div> получили лексему
Код
<div>текст1 <a>текст2</a> текст3</div>
, а только потом парсим содержимое этой лексемы
Lindemann66
 Аватар для Lindemann66
3 / 3 / 0
Регистрация: 28.04.2010
Сообщений: 162
28.07.2011, 13:44  [ТС]     HTML Parser #3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
напрмер нашли тэг <div> и парсим далше пока не встретим закрывающий тэг </div>
да, как раз сейчас и думаю над такой реализацией
но это всё равно немного не оптимально получается...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 13:47     HTML Parser #4
Цитата Сообщение от Lindemann66 Посмотреть сообщение
да, как раз сейчас и думаю над такой реализацией
но это всё равно немного не оптимально получается...
это и есть оптимально - разбиение на элементарные лексемы
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
28.07.2011, 14:33     HTML Parser #5
Согласен с Maxwe11. Для вашего примера я бы создал
C++
1
std::vector < std::string > tokens;
и выделял бы подстроки между тэгами, добавляя все эти "дела" в вектор.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.07.2011, 06:42     HTML Parser #6
Цитата Сообщение от Lindemann66
Вобщем-то, алгоритм почти реализован, но ситуация с вложенностью в нём обрабатывается плохо...
нужно применять конечный автомат
1 пример
2 пример (идея)
Yandex
Объявления
29.07.2011, 06:42     HTML Parser
Ответ Создать тему
Опции темы

Текущее время: 02:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru