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

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

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

Процессор должен учитывать все определения ключей данного преобразования — даже если некоторые из них находятся во включенных или импортированных модулях. Порядок импорта элементов xsl:key не имеет значения: дело в том, что определения ключей с одинаковыми именами для одних и тех же узлов, но с разными значениями ключа не переопределяют, а дополняют друг друга.

Пример

Предположим, что в нашем документе имеется несколько элементов item, в которых не указано значение атрибута source, но по умолчанию мы будем причислять их к источнику а. Соответствующие ключи будут определяться следующим образом:

<xsl:key name="src" match="item[@source]" use="@source"/>
<xsl:key name="src" match="item[not(@source)]" use="'a'"/>

To есть для тех элементов item, у которых есть атрибут source, значением ключа будет значение этого атрибута, для тех же элементов, у которых атрибута source нет, его значением будет "а".

Для входящего документа вида

<items>
 <item source="a" name="A"/>
 <item source="b" name="B"/>
 <item source="a" name="C"/>
 <item source="c" name="D"/>
 ...
 <item source="a" name="H"/>
 <item name="I"/>
 <item name="J"/>
 <item name="K"/>
</items>

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

(<item name="А".../>, 'src', 'а')
(<item name="В".../>, 'src', 'b')
(<item name="С".../>, 'src', 'а')
(<item name="D".../>, 'src', 'c')
...
(<item name="H".../>, 'src', 'a')
(<item name="I".../>, 'src', 'a')
(<item name="J".../>, 'src', 'a')
(<item name="K".../>, 'src', 'a')

Функция key('src', 'a') возвратит объекты с именами A, C, H, I, J и K.

То, что одни и те же узлы могут иметь разные значения одного ключа, является также очень удобным свойством. Например, два определения ключей, приведенные выше, можно дополнить третьим:

<xsl:key name="src" match="item[not(@source)]" use="'#default'"/>

Это определение позволит по значению "#default" обращаться к объектам, принадлежащим источнику по умолчанию.

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


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