#asp.net #xml #xslt
Вопрос:
Я хочу использовать xml и xsl для создания элементов управления на asp.net страница.
В настоящее время у меня есть asp.net страница содержимого, содержащая элемент управления xml. Когда страница загружена, загружается xml-файл, извлекается необходимый элемент и устанавливается в качестве элемента управления xml DocumentContent, а для элемента управления xml TransformSource устанавливается соответствующий файл xsl.
В файле xsl я хочу использовать шаблоны для создания asp.net элементы управления в зависимости от содержимого xml. Есть ли простой способ сделать это с помощью элемента управления xml на странице содержимого?
Ответ №1:
Зарегистрируйте пространство имен в своем XSL, чтобы вы могли поместить .СЕТЕВЫЕ теги на стороне сервера в него. Запустите преобразование XSL в соответствии с вашим XML. Запустите результат преобразования на странице.ПарсеКонтроли(). Это даст вам хорошую иерархию управления. Добавьте выходные данные этой функции в свою коллекцию элементов управления (или коллекцию элементов управления вашего заполнителя), и все готово.
Существует МНОЖЕСТВО предостережений при использовании динамических элементов управления в .NET, так что будьте осторожны.
Ответ №2:
Сгенерированный вывод преобразования не анализируется для добавления на страницу в качестве набора элементов управления. Скорее сгенерированный вывод отправляется в ответ. Поэтому вы не можете применить преобразование к элементу управления XML, которое создаст новые элементы управления.
Возможно, есть способ создать результат преобразования и вызвать некоторый синтаксический анализ, который можно применить к странице, но который не будет соответствовать вашим «простым» требованиям.
Ответ №3:
Я не знаю ни одного простого способа сделать это, но есть несколько систем, которые генерируют разметку aspnet на лету, а затем отправляют ее во время выполнения aspnet из потока памяти (или аналогичного).
Я думаю, что umbraco использует систему, подобную этой, но первоначальный механизм построения, вероятно, немного более низкого уровня, чем элемент управления aspnet. Это может быть достижимо с помощью httpmodule или чего-то еще, что попадает ранее в конвейер запросов.