=> Главная База Знаний Xslt Взаимодействие xalan с java


Взаимодействие xalan с java

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

Несмотря на свой размер, Xalan — один из простейших процессоров XSLT для взаимодействия с Java. В качестве примера я создал новый класс Java,

xalanjava
, и для осуществления XSLT-преобразования к нему положено обращаться следующим образом:

C:\>java xalanjava planets.xml planets.xsl planets.html

Чтобы создать XSLT-преобразование, я начну с создания объекта класса

TransformerFactory
в классе
xalanjava
:

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamSource;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerConfigurationException;

import java.io.FileOutputStream;

import java.iо.FileNotFoundException;

import java.io.IOException;


public class xalanjava {

 public static void main(String[] args)

  throws TransformerException, TransformerConfigurationException,

  FileNotFoundException, IOException {

  TransformerFactory tFactory = TransformerFactory.newInstance();

  .

  .

  .

Имена документа XML, документа XSL и результирующего документа были нам переданы в аргументах соответственно как

args[0]
,
args[1]
и
args[2]
. На следующем шаге нужно загрузить документ XSL в новый созданный мной объект
TransformerFactory
. Для этого я создал объект
StreamSource
и передал его в метод
newTransformer
объекта
TransformerFactory
, чтобы создать новый объект
Transformer
:

import javax.xml.transform.Transformer;

.

.

.

public class xalanjava {

 public static void main(String[] args)

  throws TransformerException, TransformerConfigurationException,

  FileNotFoundException, IOException {

  TransformerFactory tFactory = TransformerFactory.newInstance();

  Transformer transformer =

   tFactory.newTransformer(new StreamSource(args[1]));

  .

  .

  .

Объект

transformer
реализует XSLT-преобразование. Для того чтобы выполнить такое преобразование, нужно вызвать метод
transform
этого объекта, передав ему соответствующий XML-документу объект
StreamSource
и соответствующий результирующему документу объект
StreamResult
:

import javax.xml.transform.Transformer;

.

.

.

public class xalanjava {

 public static void main(String[] args)

  throws TransformerException, TransformerConfigurationException,

  FileNotFoundException, IOException {

  .

  .

  .

  transformer.transform(new StreamSource(args[0]),

   new StreamResult(new FileOutputStream(args[2])));

 }

}

Вот полный файл Java, xalanjava.java (листинг 10.7).

Листинг 10.7. xalanjava.java, взаимодействие Xalan с Java

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamSource;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerConfigurationException;

import java.io.FileOutputStream;

import java.io.FileNotFoundException;

import java.io.IOException;


public class xalanjava {

 public static void main(String[] args)

  throws TransformerException, TransformerConfigurationException,

  FileNotFoundException, IOException {

  TransformerFactory tFactory = TransformerFactory.newInstance();

  Transformer transformer =

   tFactory.newTransformer(new StreamSource(args[1]));

  transformer transform(new StreamSource(args[0]),

   new StreamResult(new FileOutputStream(args[2])));

 }

}

Чтобы скомпилировать файл

xalanjava.java
в
xalanjava.class
и выполнить этот класс, задайте
classpath
так, чтобы путь включал Xalan и разборщик XML, который вы обычно используете с Xalan, Xerces (о Xerces говорилось в главе 1, в том числе и о том, где его взять), — в Windows это будет выглядеть так (как всегда, пишите пути в соответствии со своей системой):

C:\>set classpath=.;c:\xalan\xalan.jar;c:\xalan\xerces.jar

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

xalanjava.java
компилятором с Java,
javac
:

C:\>javac xalanjava.java

Здесь считается, что путь к

javac.exe
прописан, и его можно сразу активизировать из командной строки. (Как правило, компилятор Java javac.exe находится в каталоге Java bin — поэтому если путь к нему не задан, к нему можно обратиться, например, так:
C:\>c:\jdk1.3\bin\javac xalanjava.java
.) Компилятор Java создаст файл
xalanjava.class
, при помощи которого производится преобразование:

C:\>java xalanjava planets.xml planets.xsl planets.html

При этом из файлов

planets.xml
и
planets.xsl
будет создан файл
planets.html
— здесь я его создал при помощи своего собственного класса Java.

РАБОТА С ПАКЕТОМ JAXP ФИРМЫ SUN ДЛЯ XSLT

Фирма Sun, создатель Java, обладает пакетом Java для обработки XML, JAXP, который можно загрузить с http://java.sun.com/xml. JAXP способен также осуществлять XSLT-преобразования. Но я не буду отдельно рассматривать JAXP в текущей главе, поскольку этот пакет (по крайней мере, сейчас) для всех своих преобразований использует Xalan, поставляемый в xalan.jar. Значит, предыдущий пример, листинг 10.7, без всяких изменений можно использовать с пакетом JAXP.