Категории
Самые читаемые
RUSBOOK.SU » Компьютеры и Интернет » Интернет » XSLT - Стивен Холзнер

XSLT - Стивен Холзнер

Читать онлайн XSLT - Стивен Холзнер

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 86 87 88 89 90 91 92 93 94 ... 115
Перейти на страницу:

Еще один аспект XSLT, в котором вам потребуется программирование, это поддержка XSLT на серверах. В качестве демонстрации далее я преобразую planets.xml при помощи planets.xsl с использованием активных серверных страниц (Active Server Pages, ASP) фирмы Microsoft, серверных страниц Java (Java Server Pages, JSP) фирмы Sun и сервлетов (servlet) Java, выполняющихся на web-серверах и возвращающих результирующий документ браузеру пользователя.

За недостатком места мы не можем подробно рассмотреть эти технологии, и если вы с ними не знакомы, вы можете получить дополнительную информацию в Интернете (как всегда, URL могут измениться):

• ASP. http://msdn.microsoft.com/workshop/c-frame.htm#/workshop/server/Default.asp (руководство и документация по ASP фирмы Microsoft);

• JSP. http://java.sun.com/products/jsp/ (главная страница Sun, посвященная JSP);

• Сервлеты. http://java.sun.com/products/servlet/ (главная страница Sun, посвященная сервлетам).

Применение 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

 .

 .

 .

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

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

Применение XSLT с Java Server Pages

Для работы с активными серверными страницами я использовал процессор MSXML фирмы Microsoft, но серверные страницы Java (Java Server Pages, JSP) не обязаны выполняться на серверах на платформе Windows, поэтому с JSP я не использую MSXML. Для выполнения XSLT-преобразования и отправки результатов в браузер клиента я воспользуюсь API процессора Xalan для работы с Java.

Например, при помощи Xalan можно создать planets.html на сервере как временный документ (этот код предполагает, что planets.xml и planets.xsl расположены в том же каталоге, что и сценарий JSP) таким образом:

<%@ page errorPage="error.jsp" language="java"

 contentType="text/html" import="org.apache.xalan.xslt.*;java.iо.*" %>

<%

 try {

  XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

  processor.process(new XSLTInputSource("planets.xml"),

   new XSLTInputSource("planets.xsl"),

   new XSLTResultTarget("planets.html"));

 } catch(Exception e) {}

 .

 .

 .

Теперь все, что нужно сделать, — это открыть документ и отправить его обратно клиенту (листинг 10.13).

Листинг 10.13. XSLT на сервере с применением JSP

<%@ page errorPage="error.jsp" language="java"

 contentType="text/html" import="org.apache.xalan.xslt.*;java.iо.*" %>

<%

 try {

  XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

  processor.process(new XSLTInputSource("planets.xml"),

   new XSLTInputSource("planets.xsl"),

   new XSLTResultTarget("planets.html"));

 } catch(Exception e) {}

 FileReader filereader = new FileReader("planets.html");

 BufferedReader bufferedreader = new BufferedReader(filereader);

 String instring;

 while((instring = bufferedreader.readLine()) != null) { %>

  <%= instring %>

 <% } 

 filereader.close();

 pw.close();

%>

Теперь все готово. Результаты применения этого сценария JSP показаны на рис. 10.6.

Рис. 10.6. Применение XSLT с JSP

Применение XSLT с сервлетами Java

Выполнять XSLT-преобразования на сервере можно также при помощи сервлетов (servlet) Java. Хотя многие процессоры XSLT предоставляют свои собственные версии сервлетов, я считаю, что гораздо проще самостоятельно выполнить преобразование при помощи Xalan или другого процессора XSLT и затем обработать результирующий документ и отправить его обратно клиенту.

В следующем примере я при помощи Xalan преобразую planets.xml во временный файл planets.html, применяя planets.xsl в сервлете:

import java.net.*;

import java.sql.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import javax.servlet.*;

import org.apache.xalan.xslt.*;

public class xslservlet extends GenericServlet {

 public void service(ServletRequest request, ServletResponse response)

  throws ServletException, IOException {

  try {

   XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

   processor.process(new XSLTInputSource("planets.xml"),

    new XSLTInputSource("planets.xsl"),

    new XSLTResultTarget("planets.html"));

  } catch(Exception e) {}

  .

  .

  .

Все, что осталось, — отправить HTML-документ обратно клиенту (листинг 10.14).

Листинг 10.14. Применение XSLT на сервере с сервлетами Java

import java.net.*;

import java.sql.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import javax.servlet.*;

import org.apache.xalan.xslt.*;

public class xslservlet extends GenericServlet {

 public void service(ServletRequest request, ServletResponse response)

  throws ServletException.IOException {

  response.setContentType("text/html");

  PrintWriter pw = response.getWriter();

  try {

   XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

   processor.process(new XSLTInputSource("planets.xml"),

    new XSLTInputSource("planets.xsl"),

1 ... 86 87 88 89 90 91 92 93 94 ... 115
Перейти на страницу:
На этой странице вы можете бесплатно скачать XSLT - Стивен Холзнер торрент бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Вася
Вася 24.11.2024 - 19:04
Прекрасное описание анального секса
Сергій
Сергій 25.01.2024 - 17:17
"Убийство миссис Спэнлоу" от Агаты Кристи – это великолепный детектив, который завораживает с первой страницы и держит в напряжении до последнего момента. Кристи, как всегда, мастерски строит