Технология 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
рейтинг книги
Младший научный сотрудник 2
2. МНС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Неестественный отбор.Трилогия
Неестественный отбор
Детективы:
триллеры
6.40
рейтинг книги
Попаданка в семье драконов
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Звезда сомнительного счастья
Фантастика:
фэнтези
6.00
рейтинг книги
Беглец
15. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Я – Орк
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Смерть может танцевать 2
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Идеальный мир для Лекаря 18
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Жандарм
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Путь Шедара
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Гром над Империей. Часть 1
5. Гром над миром
Фантастика:
фэнтези
5.20