Технология 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.
Во втором:
Поделиться:
Популярные книги
Под знаком Песца
1. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Начальник милиции. Книга 3
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Истребители. Трилогия
Фантастика:
альтернативная история
7.30
рейтинг книги
Крестоносец
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Я еще не князь. Книга XIV
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Первый среди равных. Книга IX
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 4
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Холодный ветер перемен
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Восход. Солнцев. Книга VIII
8. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Купеческая дочь замуж не желает
Фантастика:
фэнтези
6.89
рейтинг книги
Прорвемся, опера!
1. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Новый Рал 10
10. Рал!
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 16
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00