Книга: XSLT

Взаимодействие процессора XSLT Oracle с Java

Взаимодействие процессора XSLT Oracle с Java

Несколько больше усилий потребуется для осуществления XSLT-преобразования при помощи API процессора XSLT фирмы Oracle. Новый пример, oraclejava.java, продемонстрирует работу с этим API.

В oraclejava.java в первую очередь необходимо считывать требуемые документы при помощи объекта DOMParser:

import org.w3c.dom.*;
import java.util.*;
import java.io.*;
import java.net.*;
import oracle.xml.parser.v2.*;
public class oraclejava {
 public static void main (String args[]) throws Exception {
  DOMParser parser;
  try {
   parser = new DOMParser();
   parser.setPreserveWhitespace(true);
   .
   .
   .

Затем, чтобы считать исходный документ XML и документ таблицы стилей XSLT, нужно преобразовать их URL в объекты URLJava при помощи метода parse объекта parser. После этого я вызываю метод разборщика getDocument, для того чтобы извлечь и сохранить документы XML и XSLT в объектах XMLDocument:

public class oraclejava {
 public static void main (String args[]) throws Exception {
  DOMParser parser;
  XMLDocument xmldoc, xsldoc;
  URL xslURL;
  URL xmlURL;
  try {
   parser = new DOMParser();
   parser.setPreserveWhitespace(true);
   xmlURL = new URL(args[0]);
   parser.parse(xmlURL);
   xmldoc = parser.getDocument();
   xslURL = new URL(args[1]);
   parser.parse(xslURL);
   xsldoc = parser.getDocument();
   .
   .
   .

В этот момент planets.xml и planets.xsl заключены в объекты XMLDocument. Для выполнения преобразования мне необходимы еще объекты XSLStylesheet и XSLProcessor для таблицы стилей XSLT. Фактическое преобразование XSLT осуществляется методом processXSL объекта parser, возвращающего фрагмент документа:

public class oraclejava {
 public static void main (String args[]) throws Exception {
  DOMParser parser;
  .
  .
  .
  xslURL = new URL(args[1]);
  parser.parse(xslURL);
  xsldoc = parser.getDocument();
  XSLStylesheet xslstylesheet = new XSLStylesheet(xsldoc, xslURL);
  XSLProcessor processor = new XSLProcessor();
  DocumentFragment docfragment =
   processor.processXSL(xslstylesheet, xmldoc);
  .
  .
  .

Этот код завершает преобразование. Теперь задача состоит в том, чтобы преобразовать данный фрагмент документа в документ XML, который можно записать на диск, — для чего я и создам новый XML-документ, newdoc, и вставлю фрагмент документа в корень нового документа:

import org.w3c.dom.*;
.
.
.
public class oraclejava {
 public static void main (String args[]) throws Exception {
  DOMParser parser;
  XMLDocument xmldoc, xsldoc, newdoc;
  URL xslURL;
  URL xmlURL;
  try {
   .
   .
   .
   DocumentFragment docfragment =
    processor processXSL(xslstylesheet, xmldoc);
   newdoc = new XMLDocument();
   Element rootElement = newdoc.createElement("root");
   newdoc.appendChild(rootElement);
   rootElement.appendChild(docfragment);
   .
   .
   .

Теперь осталось только сохранить на диске новый XML-документ с именем, заданным в args[2]. В этих целях я использую объект FileOutputStream, и вот полный код (листинг 10.9). 

Листинг 10.9. oraclejava.java, взаимодействие процессора XSLT Oracle с Java

import org.w3c.dom.*;
import java.util.*;
import java.io.*;
import java.net.*;
import oracle.xml.parser.v2.*;
public class oraclejava {
 public static void main (String args[]) throws Exception {
  DOMParser parser;
  XMLDocument xmldoc, xsldoc, newdoc;
  URL xslURL;
  URL xmlURL;
  try {
   parser = new DOMParser();
   parser.setPreserveWhitespace(true);
   xmlURL = new URL(args[0]);
   parser.parse(xmlURL);
   xmldoc = parser.getDocument();
   xslURL = new URL(args[1]);
   parser.parse(xslURL);
   xsldoc = parser.getDocument();
   XSLStylesheet xslstylesheet = new XSLStylesheet(xsldoc, xslURL);
   XSLProcessor processor = new XSLProcessor();
   DocumentFragment docfragment =
    processor.processXSL(xslstylesheet, xmldoc);
   newdoc = new XMLDocument();
   Element rootElement = newdoc.сreateElement("root");
   newdoc.appendChild(rootElement);
   rootElement.appendChild(docfragment);
   OutputStream out = new FileOutputStream(args[2]);
   newdoc.print(out);
   out.close();
  } catch (Exception e) {}
 }
}

На этом oraclejava.java заканчивается. Чтобы скомпилировать пример, включите в classpath путь к разборщику XML процессора XSLT Oracle, xmlparserv2.jar:

C:>set classpath=.;c:oraclexmllibxmlparserv2.jar

Затем скомпилируйте oraclejava.java, как мы это уже делали, компилятором Java javac. Для выполнения XSLT-преобразований нужно указать URL документов, с которыми вы хотите работать (если документы локальны, можно указать URL файлов, как и раньше):

C:>java oraclejava http://starpowder.com/planets.xml http://starpowder.com/planets.xsl planets.html

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


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