Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2008, 21:41   #1
BaikalLord
Новичок
Джуниор
 
Регистрация: 14.12.2008
Сообщений: 2
По умолчанию HTML Парсинг

Привет всем!
Очень нужна помощь в решении нижеописанной задачи. За ранее благодарю всех причастных

Условия:
Есть HTML файл со строками в следующих вариантах:
1. <тег параметры><тег2 параметры>Текст</тег></тег2>
2. <тег параметры><тег2 параметры><?тег3?></тег></тег2>
3. <тег параметры><тег2 параметры><тег 3 параметры></тег></тег3></тег2>
4. <тег параметры></тег>
5. <тег параметры><тег2 параметры>Текст</тег2>
1 и 2 - всё ок, 3,4 и 5 - ошибка.

Задача:
Нужно парсить (желательно с большой скоростью) файлы с подобным содержанием в Delphi 7 и отслеживать в них наличие 3го, 4го и 5го типов содержания текста. То есть когда между теми или иными тегами нет текста, либо какой-то тег не закрывается.
При этом допустим случай когда между тегами может отсутствовать текст, но присутствовать одинарный тег формата <?имя тега и параметры?>.
BaikalLord вне форума Ответить с цитированием
Старый 14.12.2008, 22:50   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

А по-моему, 1й и 2 тоже не верны. Закрывать теги надо в обратном порядке к открытию (как стек), иначе у нас получается некорректный код с точки зрения XML.
Т.е. с точки зрения XML верен только 4 случай, но Вам он не подходит, т.к. не содержит текста, т.е. все варианты ошибочны.
Arigato вне форума Ответить с цитированием
Старый 14.12.2008, 22:58   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

1-й и 2-й случай не верны, хотя многие браузеры это игнорируют. (в частности ИЕ, хотя он игнорирует впринцыпе все, что только можно).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 15.12.2008, 06:52   #4
BaikalLord
Новичок
Джуниор
 
Регистрация: 14.12.2008
Сообщений: 2
По умолчанию

Ребят вы правы =), но в данном случае задача стоит иначе.
Прошу всё таки помочь создать конкретную функцию по обработке подобных файлов на базе Delphi, ато у мну скоро мозг взорвётся.
BaikalLord вне форума Ответить с цитированием
Старый 15.12.2008, 08:19   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Я делфи, конечно, не знаю, но решал бы так:

Если между тегами нет ничего, то гарантированно через символ, после ">" должен идти символ "/", при условии что остальное верно. (думаю, что такую провеку надо делать после проверки на наличие пары у тегов.)

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

Далее, если встречается какой-либо тег </ТегNN>
то проверяется масив тегов, на наличие в нем строки "ТегNN"
Если там такой не обнаружено, то ошибка на лицо.
Далее данное слово удаляется из массива тегов. (однако стоит проверять масив с конца, что бы удалять проследний тег, а не первый (если втсречаются два одинаковых открывающихся тега, например в таблице).
Если по окончанию текста (или строки) остаются теги в мпассиве тегов, значит отсуствуют закрывающие теги для данных тегов. (можно выделить отдельный масив для записи информации по тегу , вида "строка, номер тега по порядку", дабы потом можно было найти этот тег.)

P.S.

Как решить на Делфия не знаю, я С++ изучаю, но поидее алгоритм правильный.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 15.12.2008, 08:20   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Единственное что, по моему HTML допускает записи вида
Код:
<тег параметры><тег2 параметры>Текст</тег>
</тег2>
по этому проверка по одной строке не совсе правильной будет. (я имеюю ввиду наличие незакрытых тегов). Так же надо не забывать, что есть непарные теги (например <br> - переход на новую строку)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг INI-файла lyonmik Общие вопросы .NET 2 23.04.2008 19:21
Код Html prizrak1390 Общие вопросы Delphi 4 13.04.2008 21:15
HTML>>>в>>>>PHP _Solomon_ PHP 5 06.05.2007 14:12
Html страницы LineStown Работа с сетью в Delphi 3 11.04.2007 13:16