Пересмотрел очень много вариантов исходного XML для XSLT-шаблонизации. Были понятные и простые варианты, были достаточно сложные и многословные. Короче, у каждого свой велосипед.
Решил изобрести ещё один велосипед. :)
Но это не совсем изобретение велосипеда, потому что за основу взята тщательно продуманная структура класса aspx-страницы из библиотеки .NET.
Понятно, что это класс Page, в пространстве имен System.Web.UI.Но, т.к. я использую XSLT-шаблонизатор в среде ASP.NET MVC, то я включил некоторые свойства из класса ViewPage (System.Web.MVC).
В общем, минимальная реализация XML-структуры этого класса у меня выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<Page>
<!-- Свойство, используемое для более удобного доступа к модели (свойство System.Web.Mvc.ViewDataDictionary). -->
<Model>
<!-- Сюда помещается сериализованная модель, возвращаемая инфраструктурой ASP.NET MVC. -->
</Model>
<!-- Идентификатор языка и региональных параметров. -->
<Culture>ru-ru</Culture>
<!-- HTTP-значения, отправленные клиентом во время веб-запроса. -->
<Request>
<!-- Если проверка подлинности для запроса выполнена, значение True, в противном случае — False. -->
<IsAuthenticated>False</IsAuthenticated>
<!-- Виртуальный путь текущего запроса. -->
<Path>/about/</Path>
<!-- Строка, представляющая тип вызова HTTP (GET или POST), отправленного клиентом. -->
<RequestType>GET</RequestType>
<!-- URL-адрес текущего запроса. -->
<Url>http://localhost/about/</Url>
<!-- Начальная строка пользовательского агента для клиентского обозревателя. -->
<UserAgent>Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18</UserAgent>
<!-- IP-адрес узла удаленного клиента. -->
<UserHostAddress>127.0.0.1</UserHostAddress>
<!-- DNS-имя удаленного клиента. -->
<UserHostName>127.0.0.1</UserHostName>
</Request>
<!-- Представляет пользователя, производящего запрос страницы.-->
<User>
<!-- True, если пользователь прошел проверку подлинности; в противном случае — False. -->
<IsAuthenticated>False</IsAuthenticated>
<!-- Имя пользователя. -->
<Name></Name>
</User>
<!-- Данные для представления. -->
<ViewData>
<!-- Сюда помещаются сериализованные данные для представления, возвращаемые инфраструктурой ASP.NET (ViewDataDictionary). -->
</ViewData>
</Page>
* This source code was highlighted with Source Code Highlighter.
Описания к тегам, напрямую взяты из описания методов и свойств класса Page, которые можно просмотреть в обозревателе объектов (среда Visual Studio).
Далее, заполняем все необходимые значения тегов, используя контекст запроса, базу данных и можно выполнять XSLT-трансформацию.
Для заголовка и пр. деталей страницы, можно просто добавить соотвествующие теги (<title></title> и пр.).