xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
password="{$password}" driver="sun.jdbc.odbc.JdbcOdbcDriver"
xsl:extension-element-prefixes="sql"/>
xsl:extension-element-prefixes="sql">
xsl:extension-element-prefixes="sql">
Эта таблица стилей правильно добавляет три записи в базу данных
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. http://msdn.microsoft.com/workshop/c-frame.htm#/workshop/server/Default.asp (руководство и документация по ASP фирмы Microsoft);
• JSP. http://java.sun.com/products/jsp/ (главная страница Sun, посвященная JSP);
• Сервлеты. http://java.sun.com/products/servlet/ (главная страница Sun, посвященная сервлетам).
Применение XSLT с активными серверными страницами
Активные серверные страницы (Active Server Pages, ASP) выполняются на серверах Microsoft Windows NT или 2000, поэтому в ближайшем примере для преобразования
planets.xml
при помощи planets.xsl
и возврата результата в виде документа HTML я воспользуюсь процессором Microsoft MSXML.Это все то же преобразование, которое нам уже много раз встречалось, — создание HTML-таблицы данных о планетах — но на этот раз преобразование будет выполнено на web-сервере, который затем отправит его пользователю. В начале сценария ASP я установил тип содержимого MIME результирующего документа в «
text/html
», поэтому он будет трактоваться как HTML:<%@LANGUAGE="VBScript"%>
<%
Response.ContentType = "text/html"
.
.
.
Затем, во многом аналогично предыдущим примерам в этой главе с JavaScript, я создаю два объекта документа MSXML, один для документа XML, а другой — для документа XSL:
<%@LANGUAGE="VBScript"%>
<%
Response.ContentType = "text/html"
Dim docXML
Dim docXSL
Set docXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
Set docXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
.
.
.
Процедура загрузки этих документов на сервере во многом похожа на процедуру с использованием JavaScript, за тем исключением, что здесь правильные пути файлов получаются при помощи метода
MapPath
объекта Server. В данном случае я поместил planets.xml
и planets.xsl
в тот же каталог, что и сценарий ASP, поэтому документы загружаются так:<%@LANGUAGE="VBScript"%>
<%
Response.ContentType = "text/html"
Dim docXML
Dim docXSL
Set docXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
Set docXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
docXML.ValidateOnParse = True
docXSL.ValidateOnParse = True
docXML.load Server.MapPath("planets.xml")
docXSL.load Server.MapPath("planets.xsl")
.
.
.
Теперь нам осталось только применить метод
transformNode
(как в примере с JavaScript раньше) для выполнения XSLT-преобразования и вывода результатов (листинг 10.12). Листинг 10.12. XSLT на сервере с применением ASP<%@LANGUAGE="VBScript"%>
<%
Response.ContentType = "text/html"
Dim docXML
Dim docXSL
Set docXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
Set docXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
docXML.ValidateOnParse = True
docXSL.ValidateOnParse = True
docXML.load Server.MapPath("planets.xml")
docXSL.load Server.MapPath("planets.xsl")
strOutput = docXML.transformNode(docXSL)
Response.Write strOutput
%>
Результат этого преобразовании ASP показан на рис. 10.5. Теперь вы научились выполнению XSLT-преобразований на web-серверах.