Шрифт:
<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>
<xsl:template match="PLANET" name="writer">