<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 class='no-scrollbar' rows='10' cols='50'
name='{$service/text}'/>
<br/>
<input class='flat' 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
и возвращала результат клиенту.
<%@ 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='Послать сообщение'>