Технология XSLT
Шрифт:
<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")
'
Создаем объект 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
будет выглядеть следующим образом.
Поделиться с друзьями: