Для подключения к этой базе данных через 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'

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

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

 </xsl:template>

 <xsl:template match='PLANET'>

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

   .

   .

   .

  </sql:insert>

 </xsl:template>

</xsl:stylesheet>

Элемент <sql:insert> вставляет в базу данных новую запись. Чтобы присвоить ее полям новые данные, используйте элемент <sql:column>, установив его атрибут name в имя столбца, в который вы хотите записать данные, и присвоив эти данные атрибуту select:

<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='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>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату