Книга: Технология XSLT
Выполнение XSLT-преобразований в VBScript/ASP
Разделы на этой странице:
Выполнение XSLT-преобразований в VBScript/ASP
Использование MSXML на стороне сервера не сильно отличается от клиентской версии, которую мы разобрали выше. Поскольку MSXML является стандартным СОМ-объектом, его можно использовать в любом языке программирования, умеющем работать с COM. В следующем примере будет показано, как можно использовать MSXML в ASP-странице, написанной на языке VBScript. Мы напишем небольшое Web-приложение, которое позволит отправлять короткие сообщения (SMS) через разные службы, используя один интерфейс.
Почти у всех операторов мобильной связи формы для отправки сообщений более или менее стандартны, например:
<form action=" http://www.bmtelecom.ru/wap/xm.php?snd=1 " method="POST">
<input type="hidden" name="num" value="номер телефона">
<textarea rows="10" cols="50" name="msg">текст сообщения</textarea>
<br><br>
<input type="submit" value="Послать сообщение">
</form>
При этом различаться могут адреса служб отправки сообщений, методы отправки форм и наименования полей ввода. Все это мы можем описать в отдельном документе.
Листинг 9.9. Документ, описывающий формы служб отправки сообщений — services.xml
<services>
<service>
<action>http://www.mtnsms.com/sendsms.php</action>
<method>GET</method>
<text>msg</text>
<number>num</number>
</service>
<service>
<action>http://www.smshost.net/servlets/sms</action>
<method>POST</method>
<text>message</text>
<number>phone</number>
</service>
</services>
Контакт-лист после этого может быть оформлен следующим образом.
Листинг 9.10. Контакт-лист — документ source.xml
<?xml version="1.0" encoding="windows-1251"?>
<people>
<person>
<name>Иван Иванович</name>
<number>18005557684</number>
<service/>
</person>
<person>
<name>Иван Никифорович</name>
<number>447856273447</number>
<service/>
</person>
</people>
Преобразование, генерирующее HTML-страницу с формой отправки можно задать как.
Листинг 9.11. Преобразование stylesheet.xsl
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transfоrm">
<xsl:output
method="html"
indent="yes"
encoding="windows-1251"/>
<!-- Параметр, указывающий выбранного адресата, по умолчанию - p1 -->
<xsl:param name="id" select="p1"/>
<xsl:template match="/">
<html>
<xsl:call-template name="head"/>
<body>
<xsl:apply-templates select="people"/>
</body>
</html>
</xsl:template>
<xsl:template match="people">
<!-- Создаем список адресатов -->
<xsl:apply-templates select="person"/>
<!-- Создаем форму для выбранного адресата -->
<xsl:apply-templates select="person[@id=$id]" mode="form"/>
</xsl:template>
<xsl:template match="person">
<!-- Если текущий адресат выбран -->
<xsl:if test="@id = $id">
<!-- Выводим его имя в квадратных скобках и без гиперссылки -->
<xsl:text> [&#хА0;</xsl:text>
<xsl:value-of select="name"/>
<xsl:text> ] </xsl:text>
</xsl:if>
<!-- Если адресат не выбран -->
<xsl:if test="@id != $id">
<!-- Выводим его имя без скобок и с гиперссылкой -->
<xsl:text> &#хА0;&#хА0;</xsl:text>
<A href="sms.asp?id={@id}">
<xsl:value-of select="name"/>
</A>
<xsl:text>   </xsl:text>
</xsl:if>
</xsl:template>
<!-- Шаблон создания формы для выбранного адресата -->
<xsl:template match="person" mode="form">
<!--
| Находим элемент, описывающий параметры службы отправки сообщений
| текущему адресату
+-->
<xsl: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 rows="10" cols="50"
name="{$service/text}"/>
<br/>
<input type="submit" value="Послать сообщение"/>
</form>
</xsl:template>
<xsl:template name="head">
<head>
<title>SMS Center</title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
</xsl:template>
</xsl: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 rows="10" cols="50" name="msg">
</textarea>
<br><br>
<input 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 rows="10" cols="50" name="message">
</textarea>
<br><br>
<input type="submit" value="Послать сообщение">
</form>
- XSLT и другие языки
- Выполнение XSLT-преобразований в Object Pascal
- Выполнение XSLT-преобразований в C/C++
- Выполнение XSLT-преобразований в PHP
- Выполнение XSLT-преобразований в JavaScript
- Выполнение XSLT-преобразований в VBScript/ASP
- Выполнение XSLT-преобразований в Python
- Выполнение XSLT-преобразований в PL/SQL
- Выполнение XSLT-преобразований в Java
- Краткие выводы
- Глава 9 Совместное использование XSLT с другими языками программирования
- Выполнение XSLT-преобразований в C
- Выполнение XSLT-преобразований в VBScript
- Использование отдельных процессоров XSLT
- 8.4.5. Выполнение внешних команд
- Выполнение макросов
- Практическая работа 46. Выполнение расчетов с использованием Мастера функций
- Популярность XSLT-процессоров
- Преобразование в XSL-FO при помощи таблицы стилей XSLT
- 9.4.2. Регистрация времени, потраченного на выполнение задания
- Зарубежные интернет-ресурсы по XSLT
- Расширяемость XSLT