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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 02:36   #1
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию Перевод тэгов HTML в TreeView

Доброго времени суток.
Не подскажите как реализовать отображение html тэгов в TreeView, учитывая Parent и прочее (прямиком в соответствии с веб-документом)? Я начал делать такой алгоритм, но в нем есть одна большая неувязка: я регистрирую открытие тэга и при его закрытии добавляю узел в древо. Если все тэги закрывать один за другим то я получу правильную структуру древа, например:
Код:
<body>
<div id="wrapper">
   <div>
   Text
   </div>
</div>
</body>
И соответственно древо вида:
Цитата:
+ Body
---div
------div
Но если после этого кода я захочу что-либо добавить внутри тэга BODY, то в древе получу следующее:
Код:
<body>
<div id="wrapper">
   <div>
   Text
   </div>
</div>
<a href="#>...</a>
</body>
Цитата:
+ Body
---div
------div
+A
Т.е. новый тэг будет одинаков по уровню с BODY и с точки зрения алгоритма все верно - я отловил закрытие тэга BODY, и все последующие тэги записываются с ним на ровне. Но вот как учесть то, что добавляемый тэг находиться внутри какого-либо материнского тэга?

Ломаю над этим голову уже какой час... Спасибо огромное за любые полезные советы.
kettanaito вне форума Ответить с цитированием
Старый 27.12.2011, 03:01   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> все верно - я отловил закрытие тэга BODY

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

Гораздо большая проблема, имхо, со всякими тэгами, которые не требуют закрытия, или которые забыли закрыть веб-программисты.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.12.2011, 07:03   #3
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Алгоритм должен выглядеть примерно так:
1)Идем по файлу
2)Увидели тег открывается, прибавили 1 к уровню тегов
3)Увидели тег закрывается, отняли 1 к уровню тегов
4)Записываем тег в соответствии с уровнем
5)Если файл не закончился делаем пункт 1
Simply-Art вне форума Ответить с цитированием
Старый 27.12.2011, 14:10   #4
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Simply-Art, я по этому алгоритму и делаю. Но моя задача не открыть файл и вбить его в древо, а редактировать файл и в это время вбивать его в древо. Вот тэг body я закрыл и -1 от уровня тегов, но захотел вновь вернутся в тэг body и добавляя новый тег - записываю его уже на один уровень меньше, чем он должен быть (на ровне с боди запись происходит). Как узнать, что я снова в области тэга Body, и снова прибавить +1 к уровню?

veniside, каждый тэг можно сравнить и узнать требует ли он закрытия. Это как раз у меня получилось. Определить закрыты ли все тэги и какой именно не закрыт - тоже можно. На самом деле все и есть верно. Мы отловили закрытие BODY и отняли -1 от уровня древа, а потом происходит проблема описанная в этом посте чуть выше.
kettanaito вне форума Ответить с цитированием
Старый 27.12.2011, 14:29   #5
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Значит тебе нужно отлавливать не тег <body> в твоем примере, а следующий тег
Или ты добавляешь так TreeView1.add()

Вроде понятно обьяснил (Намекнул)
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 27.12.2011, 19:28   #6
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

grafgrial, в каком смысле "следующий тэг"? Ну, отловлю я начало того же тэга A из первого примера, куда мне его добавить, не зная как был открыт (и был ли закрыт) тэг BODY (по Вашему методу мы его не отлавливаем).
kettanaito вне форума Ответить с цитированием
Старый 27.12.2011, 19:36   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Как узнать, что я снова в области тэга Body, и снова прибавить +1 к уровню
Держать что-то наподобие стека открытых тэгов в виде динамического массива имен тэгов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод Excel в HTML alexan0308 Общие вопросы Delphi 1 31.08.2018 09:28
Удаление всех html тэгов из строки. askerpro PHP 3 28.11.2011 20:15
Перевод сайта с HTML/Javascript на PHP/MySQL SODUL Помощь студентам 0 15.01.2011 01:56
Перевод текста из HTML в txt Valkiria Помощь студентам 8 10.10.2007 18:39
Добавление html тэгов в поле TEXTAREA Reverent Общие вопросы по Java, Java SE, Kotlin 0 30.05.2007 15:06