result.innerHTML = strResult;
}
//-->
</script>
</head>
<body onload="init()">
<!-- Объект, представляющий входящий документ -->
<object
id="source"
width="0"
height="0"
classid="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
<param name="async" value="false">
<param name="validateOnParse" value="false">
</object>
<!-- Объект, представляющий документ преобразования -->
<object
id="stylesheet"
width="0"
height="0"
classid="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
<param name="async" value="false">
<param name="validateOnParse" value="false">
</object>
<a href="javascript:expand(' ')">Каталог</а>
<!-- В этом элементе мы будем выводить результат -->
<div id="result"/>
</body>
</html>
В браузере эта страница будет выглядеть следующим образом (рис. 9.10).
Рис. 9.10. Динамический каталог на HTML с использованием JavaScript, MSXML на основе XML и XSLT
Выполнение 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 class="flat" type="submit" value="Послать сообщение">
</form>
При этом различаться могут адреса служб отправки сообщений, методы отправки форм и наименования полей ввода. Все это мы можем описать в отдельном документе.
<services>
<service id="MTNSMS">
<action>http://www.mtnsms.com/sendsms.php</action>
<method>GET</method>
<text>msg</text>
<number>num</number>
</service>
<service id="SMSHost">
<action>http://www.smshost.net/servlets/sms</action>
<method>POST</method>
<text>message</text>
<number>phone</number>
</service>
</services>
Контакт-лист после этого может быть оформлен следующим образом.
<?xml version="1.0" encoding="windows-1251"?>
<people>
<person id="p1">
<name>Иван Иванович</name>
<number>18005557684</number>
<service id="MTNSMS"/>
</person>
<person id="p2">
<name>Иван Никифорович</name>
<number>447856273447</number>
<service id="SMSHost"/>
</person>
</people>
Преобразование, генерирующее HTML-страницу с формой отправки можно задать как.
<?xml version="1.0" encoding="windows-1251"?>
<xsclass="underline" stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transfоrm">
<xsclass="underline" output
method="html"
indent="yes"
encoding="windows-1251"/>
<!-- Параметр, указывающий выбранного адресата, по умолчанию - p1 -->
<xsclass="underline" param name="id" select="p1"/>
<xsclass="underline" template match="/">
<html>
<xsclass="underline" call-template name="head"/>
<body>
<xsclass="underline" apply-templates select="people"/>
</body>
</html>
</xsclass="underline" template>
<xsclass="underline" template match="people">
<!-- Создаем список адресатов -->
<xsclass="underline" apply-templates select="person"/>
<!-- Создаем форму для выбранного адресата -->
<xsclass="underline" apply-templates select="person[@id=$id]" mode="form"/>
</xsclass="underline" template>
<xsclass="underline" template match="person">
<!-- Если текущий адресат выбран -->
<xsclass="underline" if test="@id = $id">
<!-- Выводим его имя в квадратных скобках и без гиперссылки -->
<xsclass="underline" text> [&#хА0;</xsclass="underline" text>
<xsclass="underline" value-of select="name"/>
<xsclass="underline" text> ] </xsclass="underline" text>
</xsclass="underline" if>
<!-- Если адресат не выбран -->
<xsclass="underline" if test="@id != $id">
<!-- Выводим его имя без скобок и с гиперссылкой -->
<xsclass="underline" text> &#хА0;&#хА0;</xsclass="underline" text>
<A href="sms.asp?id={@id}">
<xsclass="underline" value-of select="name"/>
</A>
<xsclass="underline" text>   </xsclass="underline" text>
</xsclass="underline" if>
</xsclass="underline" template>
<!-- Шаблон создания формы для выбранного адресата -->
<xsclass="underline" template match="person" mode="form">
<!--
| Находим элемент, описывающий параметры службы отправки сообщений
| текущему адресату
+-->