Шрифт:
.
.
Затем необходимо создать объект
Templates
на основе таблицы стилей XSL, которую мы хотим применить, хранимой в args[1]
. Это можно сделать при помощи класса InputSource
: import java.io.*;
.
.
.
public class saxonjava {
public static void main(String args[])
throws ProcessorException, ProcessorFactoryException,
TransformException, SAXException, IOException {
Processor processor = Processor.newInstance("xslt");
Templates templates =
processor.process(new InputSource(args[1]));
.
.
.
}
}
При помощи нового объекта
Templates
можно создать объект Transformer
, который в действительности делает работу: import java.io.*;
.
.
.
public class saxonjava {
public static void main(String args[])
throws ProcessorException, ProcessorFactoryException,
TransformException, SAXException, IOException {
Processor processor = Processor.newInstance("xslt");
Templates templates =
processor.process(new InputSource(args[1]));
Transformer transformer = templates.newTransformer;
.
.
.
}
}
Наконец, чтобы осуществить XSLT-преобразование, нужно вызвать метод
transform
объекта transformer
, записывая результат в выходной документ при помощи объекта FileWriter
(листинг 10.8). Листинг 10.8. saxonjava.java, взаимодействие Saxon с Java
import java.io.*;
import org.xml.sax.*;
import org.w3c.dom.*;
import com.icl.saxon.trax.*;
public class saxonjava {
public static void main(String args[])
throws ProcessorException, ProcessorFactoryException,
TransformException, SAXException, IOException {
Processor processor = Processor.newInstance("xslt");
Templates templates =
processor.process(new InputSource(args[1]));
Transformer transformer = templates.newTransformer;
transformer.transform(new InputSource(args[0]),
new Result(new FileWriter(args[2])));
}
}
Чтобы скомпилировать и использовать новый класс
saxonjava
, нужно установить classpath
так, чтобы переменная включала путь к saxon.jar
: С:\>set сlasspath=.;с:\saxon\saxon.jar
Затем при помощи компилятора Java,
javac
, создается saxonjava.class
. Как и многие использующие API процессоры XSLT, Saxon ожидает, что ему будут переданы URL документов, с которыми вы хотите работать, — что я и делаю на следующем шаге:
C:\>java saxonjavahttp://www.starpowder.com/planets.xsl planets.html
Таким образом, создается
planets.html
, как и раньше. Заметьте, что если документы расположены локально, можно использовать URL файла. Например, в Windows, если документ XML расположен в c:\XSL\saxonjava\planets.xml
, а документ XSL в c:\XSL\saxonjava\planets.xsl
, можно выполнить такую командную строку: C:\>java saxonjava file:///XSL/saxonjava/planets.xml file:///XSL/saxonjava/planets.xsl planets.html
ПРЕОБРАЗОВАНИЕ ИМЕН ФАЙЛОВ В URL
Если вам больше нравится писать в командной строке имена файлов, а не URL, имена можно преобразовывать в URL в коде. Для этого необходимо передать полный путь к файлу в класс Java URL, а путь можно получить методом getAbsolutePath класса File: File file = new File(filename); String fullpath = file.getAbsolutePath;.