Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Перекрывающиеся теги

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Чт Дек 08 2005 03:59    Заголовок сообщения: Перекрывающиеся теги Ответить с цитатой

Пишу программу, которая из обычного html будет выдавать нечто иерархически структурированное (xml на самом деле).

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

Собственно задача на данный момент: имеется массив тегов (все, что тегами не является, заменено на <literal number="XXX" />, так что тоже считается тегом). Необходимо как-то в этом еще пока линейном массиве отловить перекрывающиеся теги. Есть регексп, который позволяет определить, относится ли данный тег к таким, которые вообще могут перекрываться. Теоретически все это делается на том этапе, когда элементы уже начинают группироваться (то есть <i><div>текст</div></i> уже превратился в <i><div ссылка на содержимое /></i> к тому моменту, как мы наткнулись на </i>). Как именно следует смотреть вперед по списку в поисках перекрывающегося тега?

Целый день уже над этим бьюсь, пока ни к чему не пришел.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
_youri_



Зарегистрирован: 27.09.2005
Сообщения: 16

СообщениеДобавлено: Пн Дек 12 2005 08:09    Заголовок сообщения: Ответить с цитатой

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



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Вт Дек 13 2005 03:34    Заголовок сообщения: Ответить с цитатой

И что будет делать такой алгоритм с последовательностью <i><b></i></b>? Загвоздка-то как раз с такими сочетаниями.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Чт Дек 15 2005 13:13    Заголовок сообщения: Ответить с цитатой

Используй интерфейсы типа IHTMLDocument2, IHTMLElement и другие. Наверное, самый оптимальный вариант.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Чт Дек 15 2005 15:13    Заголовок сообщения: Ответить с цитатой

Это из какой оперы?
Вопрос не в том, как написать прогармму, а в том, как должен выглядеть алгоритм.

Для справки: пишу на perl. Регулярные выражения сильно упрощают жизнь..
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Чт Дек 15 2005 15:30    Заголовок сообщения: Ответить с цитатой

Если подумать, то из "<i>...<b>...</i>...</b>" тебе нужно сделать что-то вроде "<i>...</i><b><i>...</i>...</b>". Это касается только тегов форматирования текста. Надо только запомнить открывающие теги, закрывать их перед следующими открывающими и сразу же открывать снова (чтобы понять, что я написал, возможно, придется прочитать несколько раз). В остальных случаях (например, "<p>a<div>b</p>c</div>") придется проявлять сообразительность. На поверку оказывается, что такая запись идентична "<p>a<div>b</div></p>c". Т.е. если теги не относятся к форматированию (проверить не сложно - их не так уж и много), то тег закрывается перед любым другим закрывающим тегом. При этом хорошо запомнить, что за тег мы закрыли и удалить его закрывающий тег, расположенный позже (если есть).
Только не забывай, что разные браузеры интерпретируют теги по-разному. Никогда не знаешь, как то или иное должно отображаться на самом деле. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...