XSLT — страница 88 из 124

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:\oraclexml\lib\xmlparserv2.jar

Затем скомпилируйте

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

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

Взаимодействие XT с Java

Процессор XT также может работать с Java. API XT спроектирован для работы с классами, определенными в Project X TR2 фирмы Sun, которые поддерживают обработку XML. Вам будет необходим файл

xml.jar
фирмы Sun, который можно получить, загрузив Project X TR2. Чтобы получить
xml.jar
, необходимо зарегистрироваться на web-узле разработчиков Sun, http://developer.java.sun.com, что, к счастью, бесплатно, хотя и потребует от вас заполнения изрядного количества форм.

Файл

xml.jar
нужен для класса
com.sun.xml.tree.XmlDocument
. Этот класс поддерживает XML-документы, и я начну свой новый пример,
xtjava.java
, с создания нового объекта
XmlDocument
для исходного документа, таблицы стилей XSLT и результирующего документа:

import java.io.IOException;

import java.io.OutputStream;

import java.io.FileOutputStream;

import org.xml.sax.SAXException;

import com.sun.xml.tree.XmlDocument;

import com.jclark.xsl.dom.Transform;

import com.jclark.xsl.dom.TransformEngine;

import com.jclark.xsl.dom.TransformException;

import com.jclark.xsl.dom.XSLTransformEngine;


class xtjava {

 public static void main(String[] args)

  throws IOException. SAXException, TransformException {

  XmlDocument XMLdoc =

   new XmlDocument().createXmlDocument(args[0]);

  XmlDocument XSLdoc =

   new XmlDocument().createXmlDocument(args[1]);

  XmlDocument newdoc = new XmlDocument();

  .

  .

  .

После этого я создаю объект

XSLTranformationEngine
и вызываю его метод
createTransform
для создания нового объекта
Transform
на основе таблицы стилей
XSLT
:

import java.io.IOException;

.

.

.

class xtjava {

 public static void main(String[] args)

  throws IOException, SAXException, TransformException {

  XmlDocument doc = new XmlDocument();

  XSLTransformEngine transformEngine = new XSLTransformEngine();

  Transform transform = transformEngine.createTransform(XSLdoc);

  .

  .

  .

Затем я могу преобразовать XML-документ в объект результирующего документа следующим способом:

import java.io.IOException;

.

.

.

class xtjava {

 public static void main(String[] args)

  throws IOException, SAXException, TransformException {

  XmlDocument XMLdoc =

   new XmlDocument().createXmlDocument(args[0]);

  XmlDocument XSLdoc =

   new XmlDocument().createXmlDocument(args[1]);

  XmlDocument newdoc = new XmlDocument();

  XSLTransformEngine transformEngine = new XSLTransformEngine();

  Transform transform = transformEngine.createTransform(XSLdoc);

  transform transform(XMLdoc, newdoc);

  .

  .

  .

Так завершается преобразование. Осталось только записать результирующий документ,

newdoc
, на диск, что можно сделать при помощи объекта
FileOutputStream
(листинг 10.10).

Листинг 10.10. xtjava.java, взаимодействие XT с Java

import java.io.IOException;

import java.io.OutputStream;

import java.io.FileOutputStream;

import org.xml.sax.SAXException;

import com.sun.xml.tree.XmlDocument;

import com.jclark.xsl.dom.Transform;

import com.jclark.xsl.dom.Transform Engine;

import com.jclark.xsl.dom.TransformException;

import com.jclark.xsl.dom.XSLTransformEngine;


class xtjava {

 public static void main(String[] args)

  throws IOException, SAXException, TransformException {

  XmlDocument XMLdoc =

   new XmlDocument().createXmlDocument(args[0]);

  XmlDocument XSLdoc =

   new XmlDocument().createXmlDocument(args[1]);