
- •Лекция 4-08
- •5.3.9. Создание текстовых узлов вXslt
- •5.3.9.1. Элементxsl:text
- •5.3.9.2. Элементxsl:value-of
- •5.3.9.3. Встроенные правила шаблона
- •1. Поздравление
- •2. Напоминание
- •5.3.9.4. Обработка пробельных символов
- •5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
- •5.3.10.1. Элемент xsl:document
- •5.3.10.2. Элементxsl:result-document
- •5.3.10.3. Элементxsl:comment
- •5.3.10.4. Элемент xsl:processing-instruction
- •5.3.10.5. Элементxsl:namespace
- •5.3.11. Копирование узлов вXslt
- •5.3.11.1. Элементxsl:copy
- •5.3.11.2. Элементxsl:copy-of
- •5.3.11.3. Элементxsl:sequence
- •5.3.12. Условная и циклическая обработка вXslt
- •5.3.12.1. Элементxsl:if
- •5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •5.3.12.3. Элементxsl:for-each
- •5.3.12.4. Сортировка вXslt
- •5.3.13. Сообщения процессораXslt
- •5.3.14. Псевдонимы пространства имен вXslt
- •5.3.15. Нумерация вXslt
- •3. Поздравление
- •1. Поздравление
- •1. Поздравление
- •01). Поздравление
- •0:00:00:00:01)Поздравление
- •5.3.16. Форматирование чисел в xslt
- •5.3.17. Использование ключей вXslt
- •5.3.18. Переменные, параметры и функции вXslt
- •5.3.18.1. Переменные в xslt
- •5.3.18.2. Вызов именованных правил шаблона
- •5.3.18.3. Параметры в xslt
- •5.3.18.4. Функции стилей в xslt
- •5.3.19. Дополнительные функции xslt
- •5.3.19.1. Функцияdocument()
- •5.3.19.2. Функцияcurrent()
- •5.3.19.3. Функцияgenerate-id()
- •5.3.19.4. Функция system-property()
- •5.3.19.5. Функцияunparsed-entity-uri()
- •5.3.20 Использование расширений вXslt
- •5.3.20.1. Средства расширенияXslt
- •5.3.20.2. Инициатива exslt
- •5.3.20.3. Средства расширения в процессореMsxml
- •5.3.20.4. Средства расширения в процессореSaxon
3. Поздравление
3. Напоминание.
Если атрибут valueне указан, элементxsl:numberрасставляет числа в зависимости от позиции текущего узла в исходном дереве. Так, если в приведенном примере в элементеxsl:numberудалить атрибутvalue, то значения номера для всех тем будет равно1.
Атрибуты level,countиfromпоказывают, как будет нумероваться текущий узел.
Атрибут countсодержит образец, которому должны удовлетворять нумеруемые узлы. Узлы, не соответствующие этому образцу, просто не будут приниматься в расчет. Значением этого атрибута по умолчанию является образец, выбирающий узлы с тем же типом и именем, что и у текущего узла (если, у него есть имя). Так, если в приведенном примере в элементеxsl:numberзаменить атрибутvalueатрибутомcount="header", то список тем примет следующий вид:
1. Поздравление
2. Напоминание.
Атрибут fromсодержит образец, который определяет так называемую область нумерации, или область подсчета. При вычислении номера будут приниматься во внимание только те нумеруемые узлы, которые принадлежат этой области. По умолчанию областью подсчета является весь документ. Если в приведенном примере задать элементxsl:numberв следующем виде:
<xsl:number from="header[position()=1]"/>,
то список тем примет следующий вид:
1. Поздравление
. Напоминание.
Вторая тема не будет иметь номера, поскольку область нумерации включает только первый заголовок.
Атрибут levelимеет три варианта значений:single,multipleиany, значением по умолчанию являетсяsingle. Процедура вычисления номеров существенным образом зависит от того, какой из этих вариантов используется: при методеsingleсчитаются элементы на одном уровне, при методеmultiple– на нескольких уровнях и при методеany– на любых уровнях дерева.
Пример использования атрибута level в элементе xsl:number:
Пусть задано следующее шаблонное правило для вывода адресатов сообщений в документе message.xml:
<xsl:template match="to" mode="level-multiple">
<p>
<xsl:number count="header | to" level="multiple"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="@address"/>
</p>
</xsl:template>.
Тогда при выполнении шаблонного правила:
<xsl:template match="/">
<xsl:apply-templates
select="//header/to" mode="level-multiple"/>
</xsl:template>
будет выведено:
1.1. petrov@mail.com
2.1. sidorov@mail.com.
Если же в этом примере заменить значение атрибута levelнаany, то вывод изменится следующим образом:
2. petrov@mail.com
4. sidorov@mail.com.
Атрибут langзадает язык нумерации и его значения – те же, что и для атрибутаxml:lang, например,lang="ru".
Значение строки формата в атрибуте formatможет состоять из имеющих специальное значение алфавитно-цифровых символов1,A,a,Iиi, а также из любых других символов. Символ1обозначает нумерацию арабскими буквами, символыAиa– нумерацию большими и маленькими латинскими буквами, а символыIиi– нумерацию большими и маленькими римскими цифрами. Все остальные символы передаются в выводимую строку без изменения. Так, если для выводимых номеров тем задать следующий элемент:
<xsl:number count="header" format="01). "/>,
то список тем сообщений будет выведен в такой форме: