XSLT
Шрифт:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script language="javascript">
<![CDATA[
function milesToKilometers(e) {
miles = parseInt(e.text);
return miles * 1.6;
}
]]>
</xsl:script>
.
.
.
Поскольку пока в Internet Explorer нельзя связать пространство имен с функцией расширения, для их вызова используется специальный элемент Microsoft
<xsl:eval>
. Ниже показано, как это выглядит в таблице стилей kilometers.xsl
, где я передаю в функцию milesToKilometers
текущий узел <RADIUS>
для преобразования миль в километры. Поскольку IE 5.5 и младше не поддерживают правила по умолчанию (хотя версия 6.0, вышедшая одновременно с подписанием этой книги в печать, поддерживает их, и вам не нужно ничего менять), для этих браузеров я предоставил правило для корневого узла (листинг 5.16). Листинг 5.16. kilometers.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script language="javascript">
<![CDATA[
function milesToKilometers(e) {
miles = parseInt(e.text);
return miles * 1.6;
}
]]>
</xsl:script>
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANETS">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANET">
<TR>
<TD><xsl:value-of select="NAME"/></TD>
<TD><xsl:value-of select="MASS"/></TD>
<TD><xsl:apply-templates match="RADIUS"/></TD>
<TD><xsl:value-of select="DAY"/></TD>
</TR>
</xsl:template>
<xsl:template match="RADIUS">
<xsl:eval>milesToKilometers(this)</xsl:eval>
</xsl:template>
</xsl:stylesheet>
Вот и все, результат этого преобразования приведен на рис. 5.4.
Рис. 5.4. Применение функции расширения в Internet Explorer
Со временем производители будут поставлять все больше и больше функций расширения. Как можно определить, доступна ли заданная функция расширения? Для этого служит функция
function-available
. Применение функции function-available
Функция XSLT 1.0
function-available
служит для проверки доступности функции. В следующем примере я хочу воспользоваться функцией расширения starpowder:calculate
для математических вычислений, а если она недоступна, я отправляю в результирующий документ текст «Sorry, can't do math today.» (Извините, сегодня математические вычисления не работают.), хотя можно, конечно, прекратить обработку и вывести сообщение об ошибке при помощи элемента <xsl:message>
: <xsl:choose xmlns:starpowder="http://www.starpowder.com">
<xsl:when test="function-available('starpowder:calculate')">
<xsl:value-of select="starpowder:calculate('2+2')"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>Sorry, can't do math today.</xsl:text>
Поделиться:
Популярные книги
Наномашины, демоненок! Том 3
3. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Обнуленный
1. Дэн Шир
Фантастика:
боевая фантастика
попаданцы
7.00
рейтинг книги
Травница Его Драконейшества
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Матабар V
5. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Жребий брошен
10. Ведун
Фантастика:
фэнтези
8.90
рейтинг книги
Кодекс Охотника. Книга XXXV
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга V
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Прайм. Альянс
5. Легенда
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Мастер 6
6. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Вперед в прошлое 5
5. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIV
34. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 11
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Осколки маски
7. Унесенный ветром
Фантастика:
боевая фантастика
альтернативная история
6.71