|
|
|
Вопросы к гуру, сложное преобразование
|
|||
|---|---|---|---|
|
#18+
Уважаемые гуру, Не подскажите, как добиться следующего. Я пишу программу на c#/aspx для веб. На странице у меня есть контрол, который принимает HTML. Соответственно, позволяет выделять жирным, италиком, цветом. В общем все как в winword. (пример контрола можно посмотреть на www.freetextbox.com). Так получается, что HTML, который передает этот контрол в мою программу на сервере не соответствует стандарту. С этим я поборолся и у меня получилось привести его к стандарту XHTML. Казалось бы, все хорошо. Но теперь у меня стоит другая задача. А именно - фильтрация тэгов. В чем заключается смысл фильтрации тэгов и для чего это нужно. Допустим, мы имеем HTML тэг FONT. Мы хотим, чтобы у этого тэга были только два атрибута - face и size. Почему? А для того, чтобы злонамеренный пользователь не смог вставить атрибут style и изменить что-то. Также это касается и других тэгов. Т.е. для каждого тэга должен быть определенный список атрибутов. Другие атрибуты необходимо просто убрать. Еще необходимо убрать все теги <script>. А если быть более точным, то политика должна быть deny, allow (как в apache, сначала запрещаем все теги, а потом разрешаем только нужные и с нужными атрибутами). Например, мы можем захотеть запретить все теги и разрешить только font, strong, i, a. Это была задача номер 1. Кратко звучит она так: Как в xml оставить только нужные тэги и с нужными атрибутами? Теперь задачка номер 2. Как выяснилось, в некоторых тэгах просто необходим атрибут style. Например, в тэге FONT желательно оставить атрибут style, в том случае если style имеет значение "BACKGROUND-COLOR: #dddd77". Причем, в качестве dddd77 может выступать любое значение цвета. В других тэгах тоже может присутствовать атрибут style. Например такой: Код: plaintext 1. Все задачи вполне можно решить "тупым" методом. Поэтому у меня вопрос. Подобное вообще можно сделать с помощью XSLT преобразования? Вот пример XML на котором можно потренироваться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 15:53 |
|
||
|
Вопросы к гуру, сложное преобразование
|
|||
|---|---|---|---|
|
#18+
Сделать можно, если использовать в xslt внешние функции, которые будут осуществлять фильтрацию, иначе как тебе разобраться со строкой в style, если нету эталонной, ее надо парсить. Да и вообще, если задачу правильно понял, тебе нужен именно парсер, который будет анализировать твой xml по определенным правилам, строить соответствующее дерево и т.д.. Задача не такая простая, лучше не мучайся с xslt и сделай все на шарпе, да и на шарпе не один месяц будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 19:19 |
|
||
|
Вопросы к гуру, сложное преобразование
|
|||
|---|---|---|---|
|
#18+
задача не очень сложная... я решал подобную. нужно было переводить например цифровое написание чисел в письменное. делалось это так. был xml-файл-справочник с написанием необходимых чисел прописью. и был xslt-шаблон, который переводит входной xml-файл в соответствии с xml-справочником, подключаемым через функцию document(). у Вас подобное. в xml-справочник засуньте все настройки для тэгов, а дальше все по вышеописанному. Babadji использовать в xslt внешние функции, которые будут осуществлять фильтрацию, иначе как тебе разобраться со строкой в style, если нету эталонной функции разбора строк "по заданным правилам" будут в xslt-шаблонах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 21:02 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=33495794&tid=1334894]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
22ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 396ms |

| 0 / 0 |
