ключей ту же роль, что и функция key для идентификаторов ID. Первый аргумент функции указывает имя ключа. Значением данного аргумента должно быть QName, которое приводится к расширеному имени как было описано в главе [2.4 Полные имена]. Если вторым аргументом функции key является список узлов, то результатом вызова будет объединение результатов вызова функции key для строкового значения каждого узла в списке, указанном в аргументе. Если же второй аргумент функции key имеет какой-либо иной тип, то этот аргумент преобразуется в строку, как при вызове функции string. При этом функция возвращает набор узлов из того же документа, где находится узел контекста, значение именованного ключа которых соответствует этой строке.
Например, дана декларация
<xsl:key name='idkey' match='div' use='@id'/>
выражение
<!ATTLIST div id ID #IMPLIED>
а атрибут
Предположим, что документ, описывающий библиотеку функций, для определения каковых используется элемент
<prototype name='key' return-type='node-set'>
<arg type='string'/>
<arg type='object'/>
</prototype>
а чтобы обратиться к названию функции используется элемент
<function>key</function>
В таком случае представленный стиль может генерировать гиперссылки между указанными ссылками и определениями следующим образом:
<xsl:key name='func' match='prototype' use='@name'/>
<xsl:template match='function'>
<b>
<a href='#{generate-id(key('func',.))}'>
<xsl:apply-templates/>
</a>
</b>
</xsl:template>
<xsl:template match='prototype'>
<p><a name='{generate-id()}'>
<b>Function: </b>
…
</a></p>
</xsl:template>
Функция key может использоваться для извлечения ключа из других документов, нежели тот, в котором содержится текущий узел контекста. Предположим, к примеру, что документ содержит библиографические ссылки в формате
<entry name='XSLT'>…</entry>
В этом случае в стиле можно использовать следующий вариант преобразования элементов
<xsl:key name='bib' match='entry' use='@name'/>
<xsl:template match='bibref'>
<xsl:variable name='name' select='.'/>
<xsl:for-each select='document('bib.xml')'>
<xsl:apply-templates select='key('bib',$name)'/>
</xsl:for-each>
</xsl:template>
12.3 Форматирование чисел
Функция format-number преобразует свой первый аргумент в строку, используя строку шаблона форматирования, представленную во втором аргументе, и десятичный формат, поименованый в третьем аргументе, либо десятичный формат по умолчанию, если третий аргумент отсутствует. Строка с шаблоном форматирования имеет синтаксис, определенный в JDK 1.1 для класса DecimalFormat. Строка шаблона форматирования представлена в локализованной нотации: десятичный формат определяет, какие именно символы в шаблоне имеют специальное значение (за исключением символа кавычки, который не подлежит локализации). Шаблон формата не должен содержать символ денежной единицы (#x00A4), такая возможность была добавлена уже после первой реализации JDK 1.1. Названием десятичного формата должно быть 1