ключей ту же роль, что и функция key для идентификаторов ID. Первый аргумент функции указывает имя ключа. Значением данного аргумента должно быть QName, которое приводится к расширеному имени как было описано в главе [2.4 Полные имена]. Если вторым аргументом функции key является список узлов, то результатом вызова будет объединение результатов вызова функции key для строкового значения каждого узла в списке, указанном в аргументе. Если же второй аргумент функции key имеет какой-либо иной тип, то этот аргумент преобразуется в строку, как при вызове функции string. При этом функция возвращает набор узлов из того же документа, где находится узел контекста, значение именованного ключа которых соответствует этой строке.

Например, дана декларация

<xsl:key name='idkey' match='div' use='@id'/>

выражение key(«idkey»,@ref) возвратит тот же набор узлов, что и id(@ref) , при условии, что в исходном XML-документе был декларирован единственный атрибут ID:

<!ATTLIST div id ID #IMPLIED>

а атрибут ref текущего узла не содержит пробельных символов.

Предположим, что документ, описывающий библиотеку функций, для определения каковых используется элемент prototype

<prototype name='key' return-type='node-set'>

<arg type='string'/>

<arg type='object'/>

</prototype>

а чтобы обратиться к названию функции используется элемент function

<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 может использоваться для извлечения ключа из других документов, нежели тот, в котором содержится текущий узел контекста. Предположим, к примеру, что документ содержит библиографические ссылки в формате <bibref>XSLT</bibref>, а также есть отдельный XML-документ bib.xml, содержащий библиографическую базу данных с записями в формате:

<entry name='XSLT'>…</entry>

В этом случае в стиле можно использовать следующий вариант преобразования элементов bibref:

<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 (число, строка, строка ?)

Функция format-number преобразует свой первый аргумент в строку, используя строку шаблона форматирования, представленную во втором аргументе, и десятичный формат, поименованый в третьем аргументе, либо десятичный формат по умолчанию, если третий аргумент отсутствует. Строка с шаблоном форматирования имеет синтаксис, определенный в JDK 1.1 для класса DecimalFormat. Строка шаблона форматирования представлена в локализованной нотации: десятичный формат определяет, какие именно символы в шаблоне имеют специальное значение (за исключением символа кавычки, который не подлежит локализации). Шаблон формата не должен содержать символ денежной единицы (#x00A4), такая возможность была добавлена уже после первой реализации JDK 1.1. Названием десятичного формата должно быть 1

  • « ...
  • 33
  • 34
  • 35
  • 36
  • » ...
  • 55
  • Добавить отзыв
    ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

    0

    Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

    Отметить Добавить цитату