`

Стивен Холзнер - XSLT

1 ... 86 87 88 89 90 ... 115 ВПЕРЕД
Перейти на страницу:

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.*;

import oracle.xml.parser.v2.*;

public class oraclejava {

 public static void main (String args[]) throws Exception {

  DOMParser parser;

  try {

   parser = new DOMParser();

   parser.setPreserveWhitespace(true);

   .

   .

   .

Затем, чтобы считать исходный документ XML и документ таблицы стилей XSLT, нужно преобразовать их URL в объекты URLJava при помощи метода parse объекта parser. После этого я вызываю метод разборщика getDocument, для того чтобы извлечь и сохранить документы XML и XSLT в объектах XMLDocument:

public class oraclejava {

 public static void main (String args[]) throws Exception {

  DOMParser parser;

  XMLDocument xmldoc, xsldoc;

  URL xslURL;

  URL xmlURL;

  try {

   parser = new DOMParser();

   parser.setPreserveWhitespace(true);

   xmlURL = new URL(args[0]);

   parser.parse(xmlURL);

   xmldoc = parser.getDocument();

   xslURL = new URL(args[1]);

   parser.parse(xslURL);

   xsldoc = parser.getDocument();

   .

   .

   .

В этот момент planets.xml и planets.xsl заключены в объекты XMLDocument. Для выполнения преобразования мне необходимы еще объекты XSLStylesheet и XSLProcessor для таблицы стилей XSLT. Фактическое преобразование XSLT осуществляется методом processXSL объекта parser, возвращающего фрагмент документа:

public class oraclejava {

 public static void main (String args[]) throws Exception {

  DOMParser parser;

  .

  .

  .

  xslURL = new URL(args[1]);

  parser.parse(xslURL);

  xsldoc = parser.getDocument();

  XSLStylesheet xslstylesheet = new XSLStylesheet(xsldoc, xslURL);

  XSLProcessor processor = new XSLProcessor();

  DocumentFragment docfragment =

   processor.processXSL(xslstylesheet, xmldoc);

  .

  .

  .

Этот код завершает преобразование. Теперь задача состоит в том, чтобы преобразовать данный фрагмент документа в документ XML, который можно записать на диск, — для чего я и создам новый XML-документ, newdoc, и вставлю фрагмент документа в корень нового документа:

import org.w3c.dom.*;

.

.

.

public class oraclejava {

 public static void main (String args[]) throws Exception {

  DOMParser parser;

  XMLDocument xmldoc, xsldoc, newdoc;

  URL xslURL;

  URL xmlURL;

  try {

   .

   .

   .

   DocumentFragment docfragment =

    processor processXSL(xslstylesheet, xmldoc);

   newdoc = new XMLDocument();

   Element rootElement = newdoc.createElement("root");

   newdoc.appendChild(rootElement);

   rootElement.appendChild(docfragment);

   .

   .

   .

Теперь осталось только сохранить на диске новый XML-документ с именем, заданным в args[2]. В этих целях я использую объект FileOutputStream, и вот полный код (листинг 10.9). 

Листинг 10.9. oraclejava.java, взаимодействие процессора XSLT Oracle с Java

import org.w3c.dom.*;

import java.util.*;

import java.io.*;

import java.net.*;

import oracle.xml.parser.v2.*;

public class oraclejava {

 public static void main (String args[]) throws Exception {

  DOMParser parser;

  XMLDocument xmldoc, xsldoc, newdoc;

  URL xslURL;

  URL xmlURL;

  try {

   parser = new DOMParser();

   parser.setPreserveWhitespace(true);

   xmlURL = new URL(args[0]);

   parser.parse(xmlURL);

   xmldoc = parser.getDocument();

   xslURL = new URL(args[1]);

   parser.parse(xslURL);

   xsldoc = parser.getDocument();

   XSLStylesheet xslstylesheet = new XSLStylesheet(xsldoc, xslURL);

   XSLProcessor processor = new XSLProcessor();

   DocumentFragment docfragment =

    processor.processXSL(xslstylesheet, xmldoc);

   newdoc = new XMLDocument();

   Element rootElement = newdoc.сreateElement("root");

   newdoc.appendChild(rootElement);

   rootElement.appendChild(docfragment);

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

   newdoc.print(out);

   out.close();

  } catch (Exception e) {}

 }

}

На этом oraclejava.java заканчивается. Чтобы скомпилировать пример, включите в classpath путь к разборщику XML процессора XSLT Oracle, xmlparserv2.jar:

C:>set classpath=.;c:oraclexmllibxmlparserv2.jar

Затем скомпилируйте oraclejava.java, как мы это уже делали, компилятором Java javac. Для выполнения XSLT-преобразований нужно указать URL документов, с которыми вы хотите работать (если документы локальны, можно указать URL файлов, как и раньше):

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

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

1 ... 86 87 88 89 90 ... 115 ВПЕРЕД
Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Стивен Холзнер - XSLT, относящееся к жанру Интернет. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)