Применение 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).
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'),
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) {
pw.println(instring);
}
filereader.close();
pw.close();
}
}
Теперь все сделано, результат показан на рис. 10.7 — HTML-документ, переданный из сервлета.

Рис. 10.7. Применение XSLT с сервлетами Java
На этом мы заканчиваем изучение работы с API процессоров XSLT в программном коде. Мы рассмотрели весьма объемный материал: как взаимодействовать с API процессоров XSLT из JavaScript и Java для процессоров MSXML, Xalan, XT, Saxon и Oracle, а также примеры выполнения XSLT-преобразований на web-серверах при помощи ASP, JSP и сервлетов Java.
Глава 11
Применение XSLT для создания документов XSL-FO
Мы уже рассмотрели XSLT-преобразования из XML в XML, HTML, XHTML, RTF, простой текст, JavaScript и даже в реляционные базы данных. В этой и следующей главах вы познакомитесь с новым преобразованием, для которого и создавались XSLT: преобразование XML в документы, которые используют форматирующие объекты, XSL (документы XSL-FO).
Такое преобразование являлось первоочередной задачей XSLT. Как вы знаете, XSLT вырос из спецификации XSL для упрощения работы с форматирующими объектами (formatting objects). Имейте в виду, что XSL-FO гораздо объемнее XSLT — здесь я смогу представить только введение в предмет.
Форматирование XSL
Как обсуждалось в главе 1, XSLT и XSL-FO составляют спецификацию XSL. В данный момент версия 1.0 этой спецификации обладает статусом рекомендации-кандидата, с последней версией вы сможете познакомиться на http://www.w3.org/TR/xsl.
Форматирующая часть XSL, XSL-FO, позволяет устанавливать точное форматирование для всего документа, вплоть до каждого миллиметра. Например, вы можете выбрать шрифт, его размер, расположение текста на странице, цвет текста, режим подчеркивания и т.д. Работа с XSL-FO во многом похожа на создание документов RTF, но с некоторыми дополнениями: например, в XSL-FO можно создавать ссылки для навигации по документам.
Если вы когда-либо видели огромное количество кодов, используемых в RTF для форматирования документов, вы поймете, что XSL-FO представляет собой сложную и очень большую спецификацию. (Вот