Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-08.doc
Скачиваний:
5
Добавлен:
12.05.2015
Размер:
422.91 Кб
Скачать

5.3.9.2. Элементxsl:value-of

Элемент xsl:value-ofвыводит в выходящее дерево строковый результат вычисления выражений и имеет следующий синтаксис:.

<xsl:value-of

select="выражение"

separator="строка"

>

<!--

Содержимое: конструктор последовательности

-->

</xsl:value-of>

Необязательный атрибут selectзадает строковое значение нового текстового узла (альтернативным является задание значения нового текстового узла в конструкторе последовательности элементаxsl:value-of).

Необязательный атрибут separatorзадает символы-разделители между элементами сгенерированной последовательности при их преобразовании в результирующее строковое значение текстового узла. По умолчанию таким разделителем является одиночный пробел. Если в качестве разделителя задана пустая строка, разделителей между элементами не будет.

5.3.9.3. Встроенные правила шаблона

В спецификации определены несколько встроенных правил шаблона, которые должен реализовать любой процессор XSLT.

Первое встроенное правило шаблона позволяет рекурсивно продолжать обработку в отсутствии успешного сравнения с явным правилом шаблона в стиле. Это правило шаблона используется как для узлов элементов, так и для корневого узла и определяется следующим образом:

<xsl:template match="*|/">

<xsl:apply-templates/>

</xsl:template>.

Для каждого метода также есть встроенное правило шаблона, позволяющее рекурсивно продолжать обработку в том же самом режиме, в отсутствии успешного сравнения с образцом из явного правила шаблона в этом стиле. Это правило шаблона применяется как для узлов элементов, так и для корневого узла. Далее приведен эквивалент встроенного правила шаблона для режима m.

<xsl:template match="*|/" mode="m">

<xsl:apply-templates mode="m"/>

</xsl:template>.

Также есть встроенное правило шаблона для текстовых узлов и узлов атрибутов, которое просто копирует текст:

<xsl:template match="text()|@*">

<xsl:value-of select="."/>

</xsl:template>.

Для инструкций обработки и комментариев встроенное правило шаблона не должно делать ничего:

<xsl:template match="processing-instruction()|comment()"/>

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

Встроенные правила шаблона обрабатываются так, как будто они были неявно импортированы раньше стиля, а потому имеют меньший приоритет импорта, чем все остальные правила шаблона. Таким образом, автор можно переопределить встроенное правило шаблона, явно включив новое правило шаблона.

Пример использования элементов xsl:text и xsl:value-of:

Следующая таблица стилей формирует документ HTMLдля оглавления тем сообщений и самих сообщений для документаXMLmessage.xml:

<?xml version="1.0" encoding="Windows-1251"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output

method="html"

encoding="Windows-1251"

indent="yes"/>

<xsl:template match="/">

<html>

<head>

<title>Вывод оглавления и списка сообщений</title>

</head>

<body>

<xsl:apply-templates select="//header/subject"

mode="contents"/>

<xsl:apply-templates select="message"/>

</body>

</html>

</xsl:template>

<xsl:template match="subject" mode="contents">

<xsl:text

disable-output-escaping="yes"><a href="#m</xsl:text>

<xsl:value-of select="position()"/>

<xsl:text

disable-output-escaping="yes">"></xsl:text>

<xsl:value-of select="position()"/>

<xsl:text>. </xsl:text>

<xsl:value-of select="."/>

<xsl:text

disable-output-escaping="yes"></a></xsl:text>

<br />

</xsl:template>

<xsl:template match="header">

<br /><br />

<xsl:text

disable-output-escaping="yes"><a name=m"</xsl:text>

<xsl:value-of

select="count(preceding-sibling::header)+1"/>

<xsl:text

disable-output-escaping="yes">"><h3></xsl:text>

<xsl:text>Сообщение </xsl:text>

<xsl:value-of

select="count(preceding-sibling::header)+1"/>

<xsl:text

disable-output-escaping="yes"></h3></a></xsl:text>

<xsl:apply-templates select="from"/>

<xsl:apply-templates select="to"/>

<xsl:apply-templates select="subject"/>

</xsl:template>

<xsl:template match="from">

<p>От:

<xsl:value-of select="@address"/>

</p>

</xsl:template>

<xsl:template match="to">

<p>Кому:

<xsl:value-of select="@address"/>

</p>

</xsl:template>

<xsl:template match="subject">

<p>Тема:

<xsl:value-of select="."/>

</p>

</xsl:template>

<xsl:template match="body">

<p>Текст:

<xsl:value-of select="."/>

</p>

</xsl:template>

</xsl:stylesheet>.

В результате преобразования тело документа HTMLбудет иметь следующий вид:

<html>

<head>

<meta http-equiv="Content-Type"

content="text/html; charset=Windows-1251">

<title>Вывод оглавления и списка сообщений</title>

</head>

<body>

<a href="#m1">1. Поздравление</a><br>

<a href="#m2">2. Напоминание</a><br>

<br /><br />

<a name="m1"><h3>Сообщение 1</h3></a>

<p>От: ivanov@mail.com</p>

<p>Кому: petrov@mail.com</p>

<p>Тема: Поздравление</p>

<p>Текст: Поздравляю с днем рождения!</p>

<br /><br />

<a name="m2"><h3>Сообщение 2</h3></a>

<p>От: ivanov@mail.com</p>

<p>Кому: sidorov@mail.com</p>

<p>Тема: Напоминание</p>

<p>Текст: Встречаемся в 10.00.</p>

</body>

</html>.

и в Web-браузере будет выведено:

Соседние файлы в папке Лекции