Книга: Технология XSLT

Использование нескольких ключей в одном преобразовании

Использование нескольких ключей в одном преобразовании

В случае, когда к узлам в преобразовании нужно обращаться по значениям различных свойств, можно определить несколько ключей — каждый со своим именем. Например, если мы хотим в одном случае обращаться к объектам, принадлежащим одному источнику, а во втором — к объектам с определенными именами, мы можем определить в документе два ключа — один с именем src, второй — с именем name:

<xsl:key name="src" match="item" use="@source"/>
<xsl:key name="name" match="item" use="@name"/>

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

(<item name="А".../>, 'src', 'а')
(<item name="А".../>, 'name', 'А')
(<item name="В".../>, 'src', 'b')
(<item name="В".../>, 'name', 'В')
(<item name="C".../>, 'src', 'a')
(<item name="C".../>, 'name', 'С')
(<item name="D".../>, 'src', 'с')
(<item name="D".../>, 'name', 'D')
...
(<item name="H".../>, 'src', 'a')
(<item name="H".../>, 'name', 'H')

В этом случае функция key('src', 'а') возвратит объекты с именами A, C и H, а функция key('name', 'а') — объект с именем А.

Имя ключа является расширенным именем. Оно может иметь объявленный префикс пространства имен, например

<xsl:key
 name="data:src"
 match="item"
 use="@source"
 xmlns:data="urn:user-data"/>

В этом случае функция key(key-name, key-value) будет возвращать узлы, значение ключа с расширенным именем key-name которых равно key-value. Совпадение расширенных имен определяется как обычно — по совпадению локальных частей и URI пространств имен.

Оглавление книги


Генерация: 1.155. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз