-- Освобождаем ресурсы
XSLPROCESSOR.freeProcessor(processor);
XMLPARSER.freeParser(parser);
XMLDOM.freeDocument(sourceXML);
XMLDOM.freeDocument(stylesheetXML);
RETURN result;
-- Обработка исключений
EXCEPTION
-- Если возникла исключительная ситуация
WHEN OTHERS THEN
-- Освобождаем ресурсы
XSLPROCESSOR.freeProcessor(processor);
XMLPARSER.freeParser(parser);
XMLDOM.freeDocument(sourceXML);
XMLDOM.freeDocument(stylesheetXML);
-- Передаем исключение дальше
RAISE;
END;
Представление обработанных документов теперь может быть описано совершенно элементарно.
Листинг 9.20. Представление PROCESSED_SOURCECREATE OR REPLACE VIEW PROCESSED_SOURCE AS
SELECT ID, PROCESS(ID) AS CONTENT
FROM SOURCE;
Продемонстрируем работу функции
PROCESS
и представления PROCESS_SOURCE
на примере двух запросов.Листинг 9.21. Запросы к таблице SOURCE и представлению PROCESSED_SOURCESQL> SELECT * FROM SOURCE;
ID CONTENT STYLESHEETID
-- ------------ ------------
1 value 1
SQL> SELECT * FROM PROCESSED_SOURCE;
ID CONTENT
-- -------------------------------------------------------
1 value
Выполнение XSLT-преобразований в Java
Язык Java традиционно широко поддерживает XML-технологии: большинство передовых разработок в этой области реализуется, как правило, сначала на Java и уж затем переносится на другие платформы разработки.
Не стал исключением и XSLT. Можно смело сказать, что количество XSLT-средств, написанных на Java, превосходит половину вообще всех существующих в настоящее время XSLT-пакетов.
Для того чтобы продемонстрировать использование XSLT в Java, мы приведем два варианта одной и той же программы — серверного приложения (сервлета), которое по запросу клиента будет возвращать информацию о текущем HTTP-сеансе в формате HTML.
Первый вариант сервлета можно назвать "традиционным". В нем HTML-документ создается серией инструкций
out.println(...)
, которые выводят в выходящий поток размеченную HTML-тегами информацию о текущем сеансе.Листинг 9.22. Традиционный вариант сервлетаimport javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class example extends HttpServlet {
/**
* Инициализация.
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
/**
* Основной метод сервлета
*/
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Выставляем тип содержимого
response.setContentType("text/html");
// Инициализируем выходящий поток
OutputStreamWriter osw =
new OutputStreamWriter(response.getOutputStream());
PrintWriter out = new PrintWriter (response.getOutputStream());
// Выполняем вывод HTML-страницы
out.println("");
// Выводим головную часть HTML-документа
out.println(" ");
out.println(" Request information ");
out.println(" ");
// Выводим тело документа
out.println(" ");
// Выводим общую информацию о запросе
out.println(" General information
");
out.println(" "); // Выводим имя сервера
out.println(" "); out.println(" Server name ");
out.println(" " + request.getServerName() + " ");
out.println("
");
// Выводим порт сервера
out.println(" "); out.println(" Server port ");
out.println(" " + request.getServerPort() + " ");
out.println("
");
// Выводим адрес запрашивающей стороны
out.println(" "); out.println(" Remote address ") ;
out.println(" " + request.getRemoteAddr() + " ");
out.println("
");
// Выводим название протокола запроса
out.println(" "); out.println(" Protocol ");
out.println(" " + request.getProtocol() + " ");
out.println("
");
// Выводим метод запроса
out.println(" ") ; out.println(" Method ");
out.println(" " + request.getMethod() + " ");
out.println("
");
// Выводим URI запроса
out.println(" "); out.println(" Request URI ");
out.println(" " + request.getRequestURI() + " ");
out.println("
");
// Выводим строку запроса
out.println(" "); out.println(" Query String ");
out.println(" " + request.getQueryString() + " ");
out.println("
");
out.println("
");
// Выводим параметры запроса
out.println(" Request parameters
");
out.println(" "); for (Enumeration e = request.getParameterNames();
e.hasMoreElements();) {
String name = e.nextElement().toString();
String[] values = request.getParameterValues(name);
for (int i=0; i < values.length; i++) {
out.println(" "); out.println(" " + name + " ");
out.println(" " + values[i] + " ");
out.println("
");
}
}
out.println("
");
// Выводим параметры HTTP-сессии
out.println(" Session parameters
");
out.println("