<BR/>
<H1>
<xsl:value-of select='Date:toString(Date:new())'/>
</H1>
<TABLE BORDER='2'>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match='PLANET'>
<TR>
<TD><xsl:value-of select='NAME'/></TD>
<TD><xsl:apply-templates select='MASS'/></TD>
<TD><xsl:apply-templates select='RADIUS'/></TD>
<TD><xsl:applу-templates select='DAY'/></TD>
</TR>
</xsl:template>
<xsl:template match='MASS'>
<xsl:value-of select='.'/>
</xsl:template>
<xsl:template match='RADIUS'>
<xsl:value-of select='.'/>
</xsl:template>
<xsl:template match='DAY'>
<xsl:value-of select='.'/>
</xsl:template>
</xsl:stylesheet>
Результат применения этой функции приведён на рис. 5.3.

Рис. 5.3. Применение функции расширения
Вот работоспособная схема и заодно веский повод включить Java в XSLT. Тем не менее, в XSLT 1.1 был представлен элемент <xsl:script>
, который, по всей видимости, будет включен и в XSLT 2.0.
Элемент <xsl:script>
Элемент <xsl:script>
был определен в рабочем проекте XSLT 1.1, он предоставляет хорошо определенный способ связи функций расширения с таблицами стилей XSLT. Это элемент верхнего уровня, обладающий следующими атрибутами:
• implements-prefix
(необязательный). Задает имя пространства имен функции расширения, которую реализует этот элемент. Принимает значение NCNAME
;
• language
(необязательный). Задает язык, используемый функцией расширения. Устанавливается в «ecmascript
» (стандарт JavaScript), «javascript
», «java
» или QNAME, не являющееся NCNAME;
• src
(необязательный). Предоставляет URI, в котором реализована функция расширения. Например, это может быть класс Java;
• archive
(необязательный). Задает архивы, которые необходимо загрузить перед запуском функции расширения, если они есть. Принимает значения списка URI, разделенного символами- разделителями.
Элемент содержит символьные данные (Microsoft использует раздел CDATA
), реализующие функцию или функции расширения.
Как теперь связать функцию, определенную в элементе <xsl:script>
, с вашей таблицей стилей XSLT? Сначала создайте в своей таблице стилей элемент <xsl:script>
как элемент верхнего уровня, затем поместите в него функции, которые вы хотите определить. В приведенном ниже примере я определяю две функции JavaScript, makeMoney
(сделать деньги) и makeMoreMoney
(сделать еще больше денег), в элементе <xsl:script>
, реализующем пространство имен расширений «starpowder
»:
<xsl:script implements prefix='starpowder' language='javascript'>
function makeMoney(e) {
.
.
.
}
function makeMoreMoney(e) {
.
.
.
}
</xsl:script>
В зависимости от вашего процессора XSLT, может оказаться хорошим решением заключить такого рода сценарии в раздел CDATA:
<xsl:script implements-prefix='starpowder' language='javascript'>
<![CDATA[
function makeMoney(e) {
.
.
.
}
function makeMoreMoney(e) {
.
.
.
}
]]>