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">
.
.
.
.
Читать дальше