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

на главную - закладки

Жанры

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

Шрифт:

 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="PLANET">

<sql:insert table="planets" xsl:extension-element-prefixes="sql">

<sql:column name="Name" select="NAME"/>

<sql:column name="Mass" select="MASS"/>

<sql:column name="Radius" select="RADIUS"/>

<sql:column name="Day" select="DAY"/>

</sql:insert>

 </xsl:template>

</xsl:stylesheet>

В

идеале этого должно быть достаточно, но при работе с самым последним драйвером Access в конце операции Saxon не сбрасывает все буфера данных. Это значит, что данные о последней планете в
planets.xml
, Земле, не будут отправлены в базу данных. Чтобы сбросить буферы данных, я явно вызываю шаблон
<PLANET>
как именованный шаблон, применяя
<sql:insert>
с данными-заглушкой (листинг 10.11).

Листинг 10.11. Работа с реляционной базой данных

<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:call-template name="writer"/>

 </xsl:template>

 <xsl:template match="PLANET" name="writer">

<xsl:choose>

<xsl:when test="NAME">

<sql:insert table="planets"

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

<sql:column name="Name" select="NAME"/>

<sql:column name="Mass" select="MASS"/>

<sql:column name="Radius" select="RADIUS"/>

<sql:column name="Day" select="DAY"/>

</sql:insert>

</xsl:when>

<xsl:otherwise>

<sql:insert table="planets"

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

<sql:column name="Name" select="' '"/>

<sql:column name="Mass" select="' '"/>

<sql:column name="Radius" select="' '"/>

<sql:column name="Day" select="' '"/>

</sql:insert>

</xsl:otherwise>

 </xsl:choose>

</xsl:template>

</xsl:stylesheet>

Эта

таблица стилей правильно добавляет три записи в базу данных
planets.mdb
: по одной новой записи для каждой из планет. Как я говорил, здесь нельзя использовать готовый исполняемый файл
saxon.exe
, нужно применять класс Java
com.icl.saxon.StyleSheet
. Сначала нужно включить в
classpath
файл
saxon.jar
:

C:\>set classpath=.;c:\saxon\saxon.jar

После этого я могу передать в класс

com.icl.saxon.StyleSheet
файл
planets.xml
и таблицу стилей из листинга 10.11:

C:\>java com.icl.saxon.StyleSheet planets.xml saxonsql.xsl

Теперь все сделано — данные планет вставлены в

planets.mdb
. Результаты применения этой таблицы стилей показаны на рис. 10.4, где я открыл
planets.mdb
в Microsoft Access. Таким образом, мы рассмотрели преобразование из XML в реляционную базу данных.

Рис. 10.4. Применение расширений SQL Saxon

Еще один аспект XSLT, в котором вам потребуется программирование, это поддержка XSLT на серверах. В качестве демонстрации далее я преобразую

planets.xml
при помощи
planets.xsl
с использованием активных серверных страниц (Active Server Pages, ASP) фирмы Microsoft, серверных страниц Java (Java Server Pages, JSP) фирмы Sun и сервлетов (servlet) Java, выполняющихся на web-серверах и возвращающих результирующий документ браузеру пользователя.

За недостатком места мы не можем подробно рассмотреть эти технологии, и если вы с ними не знакомы, вы можете получить дополнительную информацию в Интернете (как всегда, URL могут измениться):

• ASP.(руководство и документация по ASP фирмы Microsoft);

• JSP.(главная страница Sun, посвященная JSP);

• Сервлеты.(главная страница Sun, посвященная сервлетам).

Применение XSLT с активными серверными страницами

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Измена. Испорченная свадьба

Данич Дина
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Измена. Испорченная свадьба

Блуждающие огни

Панченко Андрей Алексеевич
1. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Блуждающие огни

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Затерянные земли или Великий Поход

Михайлов Дем Алексеевич
8. Господство клана Неспящих
Фантастика:
фэнтези
рпг
7.89
рейтинг книги
Затерянные земли или Великий Поход

Адвокат Империи 2

Карелин Сергей Витальевич
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 2

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Невеста снежного демона

Ардова Алиса
Зимний бал в академии
Фантастика:
фэнтези
6.80
рейтинг книги
Невеста снежного демона

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Пипец Котенку! 2

Майерс Александр
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 2