Выбрать главу

    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>

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

Листинг 9.9. Документ, описывающий формы служб отправки сообщений — services.xml

<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>

Контакт-лист после этого может быть оформлен следующим образом.

Листинг 9.10. Контакт-лист — документ source.xml

<?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-страницу с формой отправки можно задать как.

Листинг 9.11. Преобразование stylesheet.xsl

<?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>&#xA0;[&#хА0;</xsclass="underline" text>

   <xsclass="underline" value-of select="name"/>

   <xsclass="underline" text>&#xA0;]&#xA0;</xsclass="underline" text>

  </xsclass="underline" if>

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

  <xsclass="underline" if test="@id != $id">

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

   <xsclass="underline" text>&#xA0;&#хА0;&#хА0;</xsclass="underline" text>

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

    <xsclass="underline" value-of select="name"/>

   </A>

   <xsclass="underline" text>&#xA0;&#xA0;&#xA0;</xsclass="underline" text>

  </xsclass="underline" if>

 </xsclass="underline" template>

 <!-- Шаблон создания формы для выбранного адресата -->

 <xsclass="underline" template match="person" mode="form">

  <!--

   | Находим элемент, описывающий параметры службы отправки сообщений

   | текущему адресату

   +-->