Вот результат, в котором выведены отформатированные числа:
<HTML>
<HEAD>
<TITLE>
The Formatted Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Formatted Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>Mercury</TD>
<TD>0.055 (Earth = 1)</TD>
<TD>1.516 miles</TD>
<TD>58.65 days</TD>
</TR>
<TR>
<TD>Venus</TD>
<TD>0.815 (Earth = 1)</TD>
<TD>3.716 miles</TD>
<TD>116.75 days</TD>
</TR>
<TR>
<TD>Earth</TD>
<TD>1 (Earth = 1)</TD>
<TD>2.107 miles</TD>
<TD>1 days</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Этот
результирующий документ показан на рис. 8.1. (MSXML3 и Saxon отбрасывают лидирующие нули, поэтому 0.055 выводится как .055 и т.д.)
Рис. 8.1. Форматирование чисел при помощи XSLT
Следующие примеры демонстрируют способы применения форматирующих строк. Заметьте, что при помощи точки с запятой (;) можно отделять образцы для положительных и отрицательных чисел.
Число
Форматирующая строка
Результат
4567
#,###
4,567
4567.8
####.#
4567.8
4567.8
#,##0.00
4,567.80
456.789
#,##0.00
456.79
4567890
#,##0.00
4,567,890.00
4567
###0.0###
4567.0
.00045
##0.0###
0.0005
.45
#00%
45%
– 4.56
#.00;(#.00)
(4.56)
– 45
#,##0.00
– 45
function-available
При
помощи функции XSLT 1.0
function-available
можно проверить наличие функции расширения:
boolean function-available(function-name)
Функция принимает в качестве параметра имя искомой функции и, если функция доступна, возвращает истину, если нет — ложь.
Следующий пример мы уже рассматривали в главе 5. В этом случае я хочу выполнить ряд математических операций при помощи функции расширения
starpowder:calculate
, и если она отсутствует, вывести в результирующий документ текст «Sorry, can't do math today.» (Извините, сегодня математические вычисления не работают.). Можно, конечно, также прекратить обработку и вывести сообщение об ошибке при помощи элемента
дает указание процессору XSLT присвоить узлу идентификатор (который возвращается как строка). Функция применяется следующим образом:
string generate-id(node)
Функции следует передать набор узлов, содержащий только узел, которому нужен идентификатор (все узлы после первого игнорируются); функция возвращает уникальный идентификатор для этого узла. Если передать функции снова этот же узел, она вернет тот же идентификатор. Заметьте, что идентификаторы различаются в зависимости от процессора XSLT.
Следующий пример взят из главы 6, но сейчас я собираюсь добавить в
planets.html
оглавление, составленное из гиперссылок. Для создания оглавления я прохожу в цикле по всем планетам при помощи элемента
<xsl:for-each>
. На каждом шаге цикла для текущей планеты я создаю гиперссылку и создаю атрибут
HREF
со значением, равным уникальному идентификатору, при помощи шаблона значений атрибута: