Sorry, can't do math today.
Функция generate-id
дает указание процессору XSLT присвоить узлу идентификатор (который возвращается как строка). Функция применяется следующим образом:
string generate-id(node)
Функции следует передать набор узлов, содержащий только узел, которому нужен идентификатор (все узлы после первого игнорируются); функция возвращает уникальный идентификатор для этого узла. Если передать функции снова этот же узел, она вернет тот же идентификатор. Заметьте, что идентификаторы различаются в зависимости от процессора XSLT.
Следующий пример взят из главы 6, но сейчас я собираюсь добавить в planets.html
оглавление, составленное из гиперссылок. Для создания оглавления я прохожу в цикле по всем планетам при помощи элемента . На каждом шаге цикла для текущей планеты я создаю гиперссылку и создаю атрибут HREF
со значением, равным уникальному идентификатору, при помощи шаблона значений атрибута:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
.
.
.
Этот код добавляет каждой планете идентификатор и создает нужные гиперссылки. Я могу создать закладки гиперссылки в HTML-таблице данных планет, установив по очереди атрибут закладки в идентификатор для каждого элемента так, чтобы он стал гиперссылкой-назначением:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
.
.
.
Вот и все; сейчас я создал гиперссылки с атрибутом HREF
, значение которого равно идентификатору элемента ; при помощи же этого идентификатора я сделал каждый элемент назначением гиперссылки.
Когда пользователь щелкает на гиперссылку в оглавлении, браузер прокручивает данные до соответствующей записи планеты в HTML-таблице. Вот как выглядит результирующий документ при использовании процессора Xalan:
The Planets Table
The Planets Table
Mercury
Venus
Earth
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 |
Функция key
служит для поиска узлов с определенным значением по именованному ключу, ее следует применять следующим образом:
node-set key(name, value)
Функции передаются имя ключа name
в виде строки и требуемое значение ключа value
, которое нужно найти. Функция возвращает набор узлов из найденных узлов.
Ключи создаются при помощи элемента . Мы уже видели следующий пример в главе 4 — здесь я при помощи ключей выбираю планеты, чей атрибут COLOR
установлен в « BLUE
»:
.
.
.
Earth
"(Earth = 1)">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">
.
.
.
.
.
.
И вот результат — как видите, единственной планетой, удовлетворившей образцу, была Земля:
<���НЕАD>
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day |
Earth |
1 (Earth = 1) |
2107 miles |
1 days |
Функция system-property
возвращает значение нескольких системных свойств в виде строк; вот как ей следует пользоваться:
string system-property(property)
Можно проверять следующие возможные значения системного свойства property
:
• xsl:version
. Возвращает версию XSLT;
• xsl:vendor
. Возвращает строку, идентифицирующую производителя процессора XSLT;
• xsl:vendor-url
. Возвращает URL производителя процессора XSLT.
Вот пример — версию XSLT можно проверить, вызвав system-property('xsl:version')
;
xmlns:xsl="http.//www.w3.org/1999/XSL/Transform">
.
.
.
.
Читать дальше