Элемент позволяет создать ключ и выбрать узлы по этому ключу. Он обладает следующими атрибутами:
• name
(обязательный). Имя ключа, устанавливается в QName
;
• match
(обязательный). Устанавливается в образец выбора для выбора узлов, к которым применяется ключ;
• use
(обязательный). Устанавливается в выражение, определяющее значение ключа.
При помощи ключей можно легко распознавать элементы; конкретные ключи можно выбрать при помощи образца «key()». В главе 4 мы познакомились с ключами, имеющими одно значение. В следующем примере я использую ключи для выбора планет, у которых атрибут COLOR
был установлен в «BLUE» — в данном случае это Земля:
.
.
.
Earth
1
1
2107
1
128.4
Я создал ключ COLOR
, выбирающий элементы путем проверки их атрибута COLOR
. Ключ выглядит следующим образом:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
После этого я применил образец «key()» для того, чтобы выбрать элементы , у которых атрибут COLOR
установлен в «BLUE»:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
.
.
.
И вот результат — как видите, образцу удовлетворяет только Земля:
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day |
Earth |
1 (Earth = 1) |
2107 miles |
1 days |
Но в данном случае существует больше вариантов. Например, ключу могут соответствовать несколько узлов, а это означает, что использующий ключ образец вернет набор узлов. Пусть, например, все планеты будут иметь одно и то же значение атрибута COLOR
, « UNKNOWN
» (неизвестен):
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
Если создать теперь ключ COLOR
следующим образом: и осуществить поиск по этому ключу по образцу « key('COLOR', 'BLUE')
», то будут выбраны все три планеты:
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day |
Mercury |
.0553 (Earth = 1) |
1516 miles |
58.65 days |
Venus |
.815 (Earth = 1) |
3716 miles |
116.75 days |
Earth |
1 (Earth = 1) |
2107 miles |
1 days |
Кроме случая, когда ключ выбирает несколько узлов, узел также может предоставить несколько значений для одного ключа. Предположим, вы установили ключ для работы с элементом внутри элемента . Но что, если каждый элемент содержит более одного элемента , как в этом примере:
Mercury
Sister Planet
.0553
58.65
1516
.983
43.4
Venus
Sister Planet
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
В этом случае каждый элемент проверяется на совпадение с ключом. Предположим, например, что я хочу выбрать элементы с текстом «Sister Planet». Вот таблица стилей:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
|
|
|
|
.
.
.
И вот результирующий документ:
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day |
Mercury |
.0553 (Earth = 1) |
1516 miles |
58.65 days |
Venus |
.815 (Earth = 1) |
3716 miles |
116.75 days |
Элемент : создание нескольких результирующих документов
Весьма часто во время преобразования требуется создать несколько результирующих документов. Например, вам может понадобиться создать отчет о прохождении преобразования или разделить входной документ на несколько результирующих документов (например, разбить рассказ на главы). Или же вам может быть нужно создать набор результирующих документов, которые будут использоваться (как при создании кадрового (frameset) документа HTML) совместно с двумя документами, отображаемыми во фреймах.
Читать дальше