Чтение онлайн

ЖАНРЫ

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

Шрифт:

Transform transform = transformEngine.createTransform(XSLdoc);

transform transform(XMLdoc, newdoc);

.

.

.

Так завершается преобразование. Осталось только записать результирующий документ,

newdoc
, на диск, что можно сделать при помощи объекта
FileOutputStream
(листинг 10.10).

Листинг 10.10. xtjava.java, взаимодействие XT с Java

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.Transform Engine;

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;

XSLTransformEngine transformEngine = new XSLTransformEngine;

Transform transform = transformEngine.createTransform(XSLdoc);

transform.transform(XMLdoc, newdoc);

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

newdoc.write(out);

out.close;

 }

}

Чтобы

запустить пример, включите
xt.jar
и
xml.jar
в
classpath
:

C:\>set classpath=.;d:\xt\xt.jar;xml.jar

Скомпилируйте теперь

xtjava.java
компилятором Java
javac
и запустите на выполнение следующим образом, передав URL документов XML и XSL (можно передать и URL файлов, как было показано ранее):

C:\>java xtjavahttp://www.starpowder.com/planets.xsl planets.html

Теперь все сделано.

Преобразование XML в реляционную базу данных

При обсуждении дополнительных возможностей XSLT стоит упомянуть элементы расширения SQL процессора Saxon. Через драйвер Java Database Connectivity (JDBC) можно работать с реляционными базами данных. Мы уже рассмотрели преобразования из XML в XML, в простой текст, в RTF, в JavaScript и т.д. Теперь пришла очередь преобразованию XML в реляционную базу данных.

РАБОТА С ИНТЕРПРЕТИРУЕМЫМ SAXON

Обратите внимание: для связи с базами данных через JDBC нельзя использовать исполняемый файл для Windows saxon.exe. Нужно запустить реализующий Saxon класс Java com.id.saxon.StyleSheet, как я сделаю в конце примера. 

В примере я передам данные

planets.xml
в базу данных формата Microsoft Access
planets.mdb
. Если вы хотите повторить пример, создайте этот файл базы данных, в нем — таблицу
planets
с четырьмя текстовыми полями
Name
,
Mass
,
Radius
и
Day
, а оставшуюся часть файла оставьте пустой. В Windows я зарегистрирую этот файл базы данных в качестве источника ODBC с именем «planets» через значок Data Sources (ODBC) (Источники данных (ODBC)) в панели управления (в Windows 2000
он расположен в панели управления в папке Administrative Tools (Администрирование)). При запуске пример считает данные планет из
planets.xml
и добавит их в файл базы данных,
planets.mdb
.

Для подключения к этой базе данных через JDBC я применил элемент

<sql:connect>
процессора Saxon. Префикс пространства имен
sql
определяется в Saxon следующим образом:

<xsl:stylesheet

 xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">

 .

 .

 .

Для фактического подключения к источнику данных

planets
служит элемент расширения
<sql:connect>
с атрибутами
database
,
user
,
password
и
driver
. Для работы через JDBC установите атрибут
driver
в «
sun.jdbc.odbc.JdbcOdbcDriver
», атрибут
database
— в источник данных
ODBC
, «
jdbc:odbc:planets
», а атрибуты
user
и
password
— в имя пользователя и пароль, нужные для подключения к базе данных. Здесь нам не требуется задавать имя пользователя и пароль, но я задал этим параметрам шаблонные значения, так как они требуются в большинстве приложений баз данных:

<xsl:stylesheet

 xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">

 <xsl:param name="database" select="'jdbc:odbc:planets'"/>

 <xsl:param name="user"/>

 <xsl:param name="password"/>

 <xsl:template match="PLANETS">

<sql:connect database="{$database}" user="{$user}"

password="{$password}" driver="sun.jdbc.odbc.JdbcOdbcDriver"

xsl:extension-element-prefixes="sql"/>

<xsl:apply-templates select="PLANET"/>

 </xsl:template>

 .

 .

 .

Затем я подключаюсь к источнику данных

planets
. Я хочу вставить в базу данных данные из каждого элемента
<PLANET>
, для чего я создаю новый шаблон, который выбирает элементы
<PLANET>
и вставляет данные в таблицу
planets
базы данных при помощи элемента Saxon
<sql:insert>
:

<xsl:stylesheet

 xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">

 .

 .

 .

 <xsl:template match="PLANETS">

<sql:connect database="{$database}" user="{$user}"

password="{$password}" driver="sun.jdbc.odbc.JdbcOdbcDriver"

Поделиться с друзьями: