Шрифт:
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<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: