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

Взаимодействие 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]);

  XmlDocument newdoc = new XmlDocument();

  XSLTransformEngine transformEngine = new XSLTransformEngine();

  Transform transform = transformEngine.createTransform(XSLdoc);

  transform.transform(XMLdoc, newdoc);

  OutputStream out = new FileOutputStream(args[2]);

  newdoc.write(out);

  out.close();

 }

}

Чтобы запустить пример, включите xt.jar и xml.jar в classpath:

C:>set classpath=.;d:xtxt.jar;xml.jar

Скомпилируйте теперь xtjava.java компилятором Java javac и запустите на выполнение следующим образом, передав URL документов XML и XSL (можно передать и URL файлов, как было показано ранее):

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

Теперь все сделано.