Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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.
Взаимодействие Saxon с Java
Процессор Saxon также определяет API для работы с Java, но, конечно, в деталях этот прикладной интерфейс отличается от API Xalan. Для демонстрации создания преобразований при помощи Saxon API версии 6.0.2 я создам новый класс Java saxonjava
. Начать нужно с создания нового объекта XSLTProcessor
, вызвав метод newInstance
класса Processor
в файле saxonjava.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
на основе таблицы стилей 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).
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 saxonjava http://www.starpowder.com/planets.xml http://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();.
В этом примере мы работали с Saxon версии 6.0.2, о котором на web-узле Saxon говорится как о вполне надежной версии, но на момент написания книги появилась новая, полностью не протестированная версия Saxon 6.2.2. (Не существовало версии Saxon 6.1.x.) В последней версии Saxon, кажется, собирается вернуться к той же модели API, которую использует Xalan, и код, работоспособный в версии 6.0.2, не будет работать в версии 6.2.2 (сюрприз!). Ниже приведен код saxonjava.java
для версии 6.2.2 — проверьте, что при работе с этим кодом вы включили в classpath
новую версию saxon.jar
, и обратите внимание на то, что при его выполнении вам нужно передавать не URL файлов, а только их имена. Этот код идентичен показанному ранее xalanjava.java
, за исключением имени класса, saxonjava
:
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 saxonjava {
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])));
}
}
Взаимодействие процессора 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.*;
Интервал:
Закладка: