<xsl:apply-templates select='person[@id=$id]' mode='form'/>

 </xsl:template>

 <xsl:template match='person'>

  <!-- Если текущий адресат выбран -->

  <xsl:if test='@id = $id'>

   <!-- Выводим его имя в квадратных скобках и без гиперссылки -->

   <xsl:text>&#xA0;[&#хА0;</xsl:text>

   <xsl:value-of select='name'/>

   <xsl:text>&#xA0;]&#xA0;</xsl:text>

  </xsl:if>

  <!-- Если адресат не выбран -->

  <xsl:if test='@id != $id'>

   <!-- Выводим его имя без скобок и с гиперссылкой -->

   <xsl:text>&#xA0;&#хА0;&#хА0;</xsl:text>

   <A href='sms.asp?id={@id}'>

    <xsl:value-of select='name'/>

   </A>

   <xsl:text>&#xA0;&#xA0;&#xA0;</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 и возвращала результат клиенту.

Листинг 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='Послать сообщение'>

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату