Выбрать главу

  <xsclass="underline" variable name="service"

   select="document('services.xml')/services/

   service[@id = current()/service/@id]"/>

  <br/>

  <form

   action="{$service/action}" method="{$service/method}">

   <input type="hidden"

    name="{$service/number}"

    value="{number}"/>

   <textarea class="no-scrollbar" rows="10" cols="50"

    name="{$service/text}"/>

   <br/>

   <input class="flat" type="submit" value="Послать сообщение"/>

  </form>

 </xsclass="underline" template>

 <xsclass="underline" template name="head">

  <head>

   <title>SMS Center</title>

   <link rel="stylesheet" type="text/css" href="style.css"/>

  </head>

 </xsclass="underline" template>

</xsclass="underline" stylesheet>

Теперь дело осталось за ASP-страницей, которая применяла бы преобразование stylesheet.xsl к документу source.xml и возвращала результат клиенту.

Листинг 9.12. ASP-страница, использующая XSLT-преобразования

<%@ LANGUAGE = VBScript %>

<%

 ' Загружаем входящий документ

 Dim source

 Set source = Server.CreateObject("MSXML2.FreeThreadedDOMDocument.3.0")

 source.load Server.MapPath("source.xml")

 ' Загружаем преобразование

 Dim stylesheet

 Set stylesheet =

  Server.CreateObject("MSXML2.FreeThreadedDOMDocument.3.0")

 stylesheet.load Server.MapPath("stylesheet.xsl")

 ' Создаем объект XSLTemplate для преобразования

 Dim templates

 Set templates = Server.CreateObject("MSXML2.XSLTemplate")

 templates.stylesheet = stylesheet.documentElement

 ' Создаем объект XSLT-процессора

 Dim processor

 Set processor = templates.createProcessor

 processor.input = source

 ' Присваиваем параметру id значение параметра запроса id

 ' (то, что передано в sms.asp?id=...)

 processor.addParameter "id", "" + Request.QueryString("id"), ""

 ' Выполняем преобразование

 processor.transform

 ' Возвращаем результат

 Response.Charset = "windows-1251"

 Response.Write processor.output

%>

На рис. 9.11 показаны результаты работы sms.asp для id=p1 и id=p2.

Рис. 9.11. Внешний вид страницы, возвращаемой sms.asp

При вызове страницы sms.asp или sms.asp?id=p1 форма отправки сообщений будет сгенерирована в следующем виде:

<form action="http://www.mtnsms.com/sendsms.php" method="GET">

 <input type="hidden" name="num" value="18005557684">

 <textarea class="no-scrollbar" rows="10" cols="50" name="msg">

 </textarea>

 <br><br>

 <input class="flat" type="submit" value="Послать сообщение">

</form>

Для sms.asp?id=p2 форма будет иметь вид:

<form action="http://www.smshost.net/servlets/sms" method="POST">

 <input type="hidden" name="phone" value="447856273447">

 <textarea class="no-scrollbar" rows="10" cols="50" name="message">

 </textarea>

 <br><br>

 <input class="flat" type="submit" value="Послать сообщение">

</form>

Выполнение XSLT-преобразований в Python

Пример использования XSLT-преобразований в Python, который мы продемонстрируем ниже, будет основываться на использовании библиотек 4Suite и PyXML.

Простейший скрипт, преобразующий документ source.xml при помощи преобразования stylesheet.xsl будет выглядеть следующим образом.

Листинг 9.13. Простейший вызов 4Suite

python -с "import sys;from xml.xslt import _4xslt;_4xslt.Run(sys.argv[1:])" -i source.xml stylesheet.xsl

Использование XSLT-процессора в собственных программах на Python ненамного сложнее.

Листинг 9.14. Использование XSLT-процессора в Python

# Импортируем библиотеки

import sys

from xml.xslt.Processor import Processor

# Создаем XSLT-процессор

processor = Processor()

# Загружаем XSLT-преобразование

processor.appendStylesheetUri('stylesheet.xsl')

# Выполняем преобразование

result = processor.runUri('source.xml')

# Выводим результирующий документ print result

Выполнение XSLT-преобразований в PL/SQL

Универсальность технологии XSLT позволяет использовать ее на самых различных уровнях архитектуры приложений. В этом разделе мы приведем пример использования преобразований внутри базы данных.

На этот раз в качестве целевой платформы будет использоваться база данных Oracle 8i, которая обеспечивает поддержку XSLT несколькими встроенными пакетами: XMLDOM, XMLPARSER и XSLPROCESSOR.

Представим себе следующую схему элементарной БД (рис. 9.12):

Рис. 9.12. Схема простой базы данных

Таблица STYLESHEET содержит XSLT-преобразования, которые хранятся в полях CONTENT, поле ID указывает уникальный идентификатор каждого из них.

Таблица SOURCE содержит XML-документы (поле CONTENT), каждому из которых соответствует некоторое преобразование (внешний ключ STYLESHEETID). Нашей задачей будет создание представления, в котором документы, хранящиеся в таблице SOURCE, будут обрабатываться соответствующими преобразованиями из таблицы STYLESHEET.

Прежде всего, создадим таблицы и ключи, соответствующие приведенной выше схеме базы данных.

Листинг 9.15. Создание схемы БД

-- Создаем таблицу stylesheet

CREATE TABLE STYLESHEET

 (ID     INTEGER NOT NULL,

 CONTENT CLOB NULL);

-- Создаем первичный ключ таблицы STYLESHEET

ALTER TABLE STYLESHEET

 ADD (PRIMARY KEY (ID));

-- Создаем таблицу SOURCE

CREATE TABLE SOURCE

 (ID          INTEGER NOT NULL,

 CONTENT      CLOB NULL,

 STYLESHEETID INTEGER NOT NULL);

-- Создаем первичный ключ таблицы SOURCE

ALTER TABLE SOURCE