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

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

Жанры

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

Шрифт:

 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 с активными серверными страницами

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

Эволюционер из трущоб. Том 12

Панарин Антон
12. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 12

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Охотник на демонов

Шелег Дмитрий Витальевич
2. Живой лёд
Фантастика:
боевая фантастика
5.83
рейтинг книги
Охотник на демонов

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

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

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Князь

Шмаков Алексей Семенович
5. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
5.00
рейтинг книги
Князь

Русская драматургия XVIII – XIX вв. (Сборник)

Пушкин Александр Сергеевич
Поэзия:
драматургия
6.25
рейтинг книги
Русская драматургия XVIII – XIX вв. (Сборник)

Страж Кодекса

Романов Илья Николаевич
1. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса

Древесный маг Орловского княжества

Павлов Игорь Васильевич
1. Орловское княжество
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества

Кодекс Охотника. Книга IX

Винокуров Юрий
9. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга IX

Язычник

Мазин Александр Владимирович
5. Варяг
Приключения:
исторические приключения
8.91
рейтинг книги
Язычник

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Чужак

Листратов Валерий
1. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Чужак

Барон. Книга вторая

Первухин Андрей Евгеньевич
6. Ученик
Фантастика:
фэнтези
попаданцы
5.40
рейтинг книги
Барон. Книга вторая