Чтение онлайн

на главную

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

org.apache.xalan.templates.ElemExtensionCall elem)

где

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

public String time(XSLProcessorContext context,

ElemExtensionCall elem)

Два

аргумента, которые передаются методу элемента расширения, описывают контекст преобразования (
XSLProcessorContext
) и параметры вызова элемента расширения (
ElemExtensionCall
). Чуть позже мы покажем, как можно использовать эти объекты для создания более функциональных элементов расширения; пока же продолжим с элементом
ext:time
.

Следующим шагом мы создадим класс расширения

ext.java
, в котором реализуем описанный выше метод
time
.

Листинг 10.18 Класс ext.java

package de.fzi.xslt;

import java.util.Date;

import java.text.SimpleDateFormat;

import org.apache.xalan.extensions.XSLProcessorContext;

import org.apache.xalan.templates.ElemExtensionCall;

public class ext {

 public String time(XSLProcessorContext context,

ElemExtensionCall elem) {

SimpleDateFormat df = new SimpleDateFormat("HH:mm");

return df.format(new Date);

 }

}

Равно как и в случае с функциями расширения, связующим звеном между элементами и Java-имплементацией их семантики служат пространства имен. В нашем случае класс

de.fzi.xslt.ext
может быть связан с префиксом пространства имен
ext
следующим объявлением:

xmlns:ext="xalan://de.fzi.xslt.ext"

Однако это еще не все. Для того чтобы элементы определенного пространства имен воспринимались процессором как элементы расширения, необходимо также явно указать префиксы этих пространств в атрибуте

extension-element-prefixes
элемента
xsl:stylesheet
:

<xsl:stylesheet

 ...

 extension-element-prefixes="ext">

 ...

</xsl:stylesheet>

В итоге наше преобразование будет иметь следующий вид.

Листинг 10.19. Преобразование, использующее элемент расширения

<xsl:stylesheet

 version="1.0"

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

 xmlns:ext="xalan://de.fzi.xslt.ext"

 extension-element-prefixes="ext">

 <xsl:template match="/">

<!-- ...
– ->

This page was generated at <ext:time/>.

 </xsl:template>

</xsl:stylesheet>

Результатом

этого преобразования будет документ вида:

This page was generated at 11:56.

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

ext:date
, который будет выводить текущую дату или время в формате, зависящем от значения его атрибута
pattern
.

Листинг 10.20. Класс ext.java реализация элемента ext:date

package de.fzi.xslt;

import java.util.Date;

import java.text.SimpleDateFormat;

import org.apache.xalan.extensions.XSLProcessorContext;

import org.apache.xalan.templates.ElemExtensionCall;

public class ext{

 public String date(XSLProcessorContext context, ElemExtensionCall elem) {

SimpleDateFormat df;

// Получаем значение атрибута pattern элемента расширения

String pattern = elem.getAttribute("pattern");

// Если атрибут pattern не определен,

// используем образец форматирования, определенный по умолчанию

if (pattern == null)

df = new SimpleDateFormat;

// Если атрибут pattern определен, используем его значение

// в качестве образца форматирования

else

df = new SimpleDateFormat(pattern);

return df.format(new Date);

 }

}

В преобразовании этот элемент мы можем использовать как:

This page was generated at <ext:date pattern="HH:mm"/> on

<ext:date pattern="dd/MM/yyyy"/>.

или:

This page was generated on <ext:date/>.

В первом случае результатом будет:

This page was generated at 12:11 on 08/10/2001.

Во втором:

Поделиться:
Популярные книги

Лорд Системы 12

Токсик Саша
12. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 12

Младший научный сотрудник 2

Тамбовский Сергей
2. МНС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Младший научный сотрудник 2

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Неестественный отбор.Трилогия

Грант Эдгар
Неестественный отбор
Детективы:
триллеры
6.40
рейтинг книги
Неестественный отбор.Трилогия

Попаданка в семье драконов

Свадьбина Любовь
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Попаданка в семье драконов

Звезда сомнительного счастья

Шах Ольга
Фантастика:
фэнтези
6.00
рейтинг книги
Звезда сомнительного счастья

Беглец

Кораблев Родион
15. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Беглец

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Смерть может танцевать 2

Вальтер Макс
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Смерть может танцевать 2

Идеальный мир для Лекаря 18

Сапфир Олег
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 18

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Гром над Империей. Часть 1

Машуков Тимур
5. Гром над миром
Фантастика:
фэнтези
5.20
рейтинг книги
Гром над Империей. Часть 1