- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания XSLT - Стивен Холзнер
Шрифт:
Интервал:
Закладка:
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 с Javaimport 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:xalanxalan.jar;c:xalanxerces.jar
Затем скомпилируйте xalanjava.java компилятором с Java, javac:
C:>javac xalanjava.java
Здесь считается, что путь к javac.exe прописан, и его можно сразу активизировать из командной строки. (Как правило, компилятор Java javac.exe находится в каталоге Java bin — поэтому если путь к нему не задан, к нему можно обратиться, например, так: C:>c:jdk1.3binjavac 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).
Листинг 10.8. saxonjava.java, взаимодействие Saxon с Javaimport 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=.;с:saxonsaxon.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:XSLsaxonjavaplanets.xml, а документ XSL в c:XSLsaxonjavaplanets.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;