Алексей Валиков - Технология XSLT

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Технология XSLT"
Описание и краткое содержание "Технология XSLT" читать бесплатно онлайн.
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
</a>
<br/><xsl:text>
</xsl:text>
<!--
| Если категория принадлежит раскрываемой ветке,
| обрабатываем ее подкатегории
+-->
<xsl:if test="count(.|$path)=count($path)">
<xsl:apply-templates select="category">
<!-- Увеличиваем отступ на три пробела -->
<xsl:with-param name="indent"
select="concat($indent,'   ')"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Теперь осталось лишь только создать страницу, которая при помощи JavaScript и MSXML будет выполнять преобразования и выводить результат.
Для того чтобы воспользоваться возможностями MSXML, мы включим в нашу страницу два объекта:
<!-- Объект, представляющий входящий документ -->
<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>
"Магический" код clsid:f5078f32-c551-11d3-89b9-0000f81fe221, который присутствует в тегах обоих объектов, на самом деле не что иное, как уникальный идентификатор библиотеки MSXML 3.0, которую мы и будем использовать для выполнения преобразования. Итак, код нашей HTML- страницы будет выглядеть следующим образом.
Листинг 9.8. Код HTML-страницы<html>
<head>
<meta
http-equiv="Content-Type"
content="text/html; charset=windows-1251" />
<style type="text/css">
body {font-family:Tahoma,Verdana,Arial,sans-serif; font-size:14px}
a:link {COLOR:#990000; BACKGROUND: #ffffff; TEXT-DECORATION: none}
a:hover {BACKGROUND: #dddddd; TEXT-DECORATION: none}
a:visited {COLOR: #990000; TEXT-DECORATION: none}
</style>
<script language="JavaScript">
<!--
// Объявляем глобальные переменные
// Входящий документ
var source;
// Преобразование
var stylesheet;
// Результат
var result;
// Функция, выполняющая действия по инициализации
function init() {
// Инициализируем ссылку на объект входящего документа
source = document.all['source'];
// Загружаем входящий документ
source.load('source.xml');
// Инициализируем ссылку на объект преобразования
stylesheet = document.all['stylesheet'];
// Загружаем документ преобразования
stylesheet.load('stylesheet.xsl');
// Находим элемент, в который мы будем выводить
// результат обработки
result = document.all['result'];
}
// Функция, выполняющая "раскрытие"
//определенной ветки дерева категорий.
function expand(id) {
// Получаем ссылку на атрибут select
// объявления параметра current
var attSelect = stylesheet.selectSingleNode(
"/xsl:stylesheet/xsl:param[@name='current']/@select");
// Изменяем значение этого атрибута. Одинарные кавычки необходимы
// для того, чтобы новое значение воспринималось как литерал.
attSelect.nodeValue = "'" + id + "'";
// Выполняем преобразование
strResult = source.transformNode(stylesheet);
// Обновляем страницу
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"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transfоrm">
<xsl:output
method="html"
indent="yes"
encoding="windows-1251"/>
<!-- Параметр, указывающий выбранного адресата, по умолчанию - p1 -->
<xsl:param name="id" select="p1"/>
<xsl:template match="/">
<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="sms.asp?id={@id}">
<xsl:value-of select="name"/>
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Технология XSLT"
Книги похожие на "Технология XSLT" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Алексей Валиков - Технология XSLT"
Отзывы читателей о книге "Технология XSLT", комментарии и мнения людей о произведении.