Валиков Алексей Н.
Шрифт:
<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="#">
<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="#"/>
</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")