Взаимодействие процессора XSLT Oracle с Java
Взаимодействие процессора 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