<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 и возвращала результат клиенту.
<%@ 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 будет выглядеть следующим образом.
python -с "import sys;from xml.xslt import _4xslt;_4xslt.Run(sys.argv[1:])" -i source.xml stylesheet.xsl
Использование 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.
Прежде всего, создадим таблицы и ключи, соответствующие приведенной выше схеме базы данных.
-- Создаем таблицу 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