Книга: XSLT

Применение XSLT с активными серверными страницами

Применение XSLT с активными серверными страницами

Активные серверные страницы (Active Server Pages, ASP) выполняются на серверах Microsoft Windows NT или 2000, поэтому в ближайшем примере для преобразования planets.xml при помощи planets.xsl и возврата результата в виде документа HTML я воспользуюсь процессором Microsoft MSXML.

Это все то же преобразование, которое нам уже много раз встречалось, — создание HTML-таблицы данных о планетах — но на этот раз преобразование будет выполнено на web-сервере, который затем отправит его пользователю. В начале сценария ASP я установил тип содержимого MIME результирующего документа в «text/html», поэтому он будет трактоваться как HTML:

<%@LANGUAGE="VBScript"%>
<%
 Response.ContentType = "text/html"
 .
 .
 .

Затем, во многом аналогично предыдущим примерам в этой главе с JavaScript, я создаю два объекта документа MSXML, один для документа XML, а другой — для документа XSL:

<%@LANGUAGE="VBScript"%>
<%
 Response.ContentType = "text/html"
 Dim docXML
 Dim docXSL
 Set docXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
 Set docXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
 .
 .
 .

Процедура загрузки этих документов на сервере во многом похожа на процедуру с использованием JavaScript, за тем исключением, что здесь правильные пути файлов получаются при помощи метода MapPath объекта Server. В данном случае я поместил planets.xml и planets.xsl в тот же каталог, что и сценарий ASP, поэтому документы загружаются так:

<%@LANGUAGE="VBScript"%>
<%
 Response.ContentType = "text/html"
 Dim docXML
 Dim docXSL
 Set docXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
 Set docXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
 docXML.ValidateOnParse = True
 docXSL.ValidateOnParse = True
 docXML.load Server.MapPath("planets.xml")
 docXSL.load Server.MapPath("planets.xsl")
 .
 .
 .

Теперь нам осталось только применить метод transformNode (как в примере с JavaScript раньше) для выполнения XSLT-преобразования и вывода результатов (листинг 10.12). 

Листинг 10.12. XSLT на сервере с применением ASP

<%@LANGUAGE="VBScript"%>
<%
 Response.ContentType = "text/html"
 Dim docXML
 Dim docXSL
 Set docXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
 Set docXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
 docXML.ValidateOnParse = True
 docXSL.ValidateOnParse = True
 docXML.load Server.MapPath("planets.xml")
 docXSL.load Server.MapPath("planets.xsl")
 strOutput = docXML.transformNode(docXSL)
 Response.Write strOutput
%>

Результат этого преобразовании ASP показан на рис. 10.5. Теперь вы научились выполнению XSLT-преобразований на web-серверах.


Рис. 10.5. Применение XSLT с ASP

Нужно сделать одно замечание: при выполнении XSLT-преобразований на сервере можно подумать об оптимизации ваших преобразований в зависимости от клиента, так как необязательно генерировать для карманного компьютера тот же экран, что и для браузера настольного компьютера. Например, можно настроить ответ вашего серверного сценария ASP (где я проверяю значение серверной переменной http_user_agent чтобы определить, использует ли клиент Internet Explorer) следующим образом: 

<%@LANGUAGE="VBScript"%>
<%
 Response ContentType = "text/html"
 If instr(request,servervariables("http_user_agent"), "MSIE") = 0 then
  Response.Write "Sorry, not optimized for your device."
  Response.End
 End If
 .
 .
 .

ОТДЕЛЕНИЕ ДАННЫХ ОТ ИХ ПРЕДСТАВЛЕНИЯ

Одной из преобладающих тенденций в последнее время является стремление отделить данные от представляющего их кода. Рассмотренный пример демонстрирует преимущества такого подхода: единственный набор данных можно преобразовывать в рабочем порядке для различных браузеров.

Оглавление книги


Генерация: 2.423. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз