|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2008, 21:41 | #1 |
Новичок
Джуниор
Регистрация: 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го типов содержания текста. То есть когда между теми или иными тегами нет текста, либо какой-то тег не закрывается. При этом допустим случай когда между тегами может отсутствовать текст, но присутствовать одинарный тег формата <?имя тега и параметры?>. |
14.12.2008, 22:50 | #2 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,643
|
А по-моему, 1й и 2 тоже не верны. Закрывать теги надо в обратном порядке к открытию (как стек), иначе у нас получается некорректный код с точки зрения XML.
Т.е. с точки зрения XML верен только 4 случай, но Вам он не подходит, т.к. не содержит текста, т.е. все варианты ошибочны. E-Mail: arigato.freelance@gmail.com
|
14.12.2008, 22:58 | #3 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
1-й и 2-й случай не верны, хотя многие браузеры это игнорируют. (в частности ИЕ, хотя он игнорирует впринцыпе все, что только можно).
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
15.12.2008, 06:52 | #4 |
Новичок
Джуниор
Регистрация: 14.12.2008
Сообщений: 2
|
Ребят вы правы =), но в данном случае задача стоит иначе.
Прошу всё таки помочь создать конкретную функцию по обработке подобных файлов на базе Delphi, ато у мну скоро мозг взорвётся. |
15.12.2008, 08:19 | #5 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Я делфи, конечно, не знаю, но решал бы так:
Если между тегами нет ничего, то гарантированно через символ, после ">" должен идти символ "/", при условии что остальное верно. (думаю, что такую провеку надо делать после проверки на наличие пары у тегов.) пару можно проверить так, создать большой масив строк, и в каждую строку вписывать встреченный открывающийся тэг. Далее, если встречается какой-либо тег </ТегNN> то проверяется масив тегов, на наличие в нем строки "ТегNN" Если там такой не обнаружено, то ошибка на лицо. Далее данное слово удаляется из массива тегов. (однако стоит проверять масив с конца, что бы удалять проследний тег, а не первый (если втсречаются два одинаковых открывающихся тега, например в таблице). Если по окончанию текста (или строки) остаются теги в мпассиве тегов, значит отсуствуют закрывающие теги для данных тегов. (можно выделить отдельный масив для записи информации по тегу , вида "строка, номер тега по порядку", дабы потом можно было найти этот тег.) P.S. Как решить на Делфия не знаю, я С++ изучаю, но поидее алгоритм правильный.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
15.12.2008, 08:20 | #6 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Единственное что, по моему HTML допускает записи вида
Код:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Парсинг 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 |