.
.
Проверка версии XSLT может понадобиться, если вы хотите воспользоваться возможностями, которые появились в последних версиях.
Функция unparsed-entity-uri()
предоставляет доступ к объявлениям неразобранных сущностей в DTD или схеме исходного документа. Неразобранная сущность (unparsed entity) — это обычно двоичные данные, такие как файл с рисунком. Функция применяется следующим образом:
string unparsed-entity-uri(name)
В функцию передается имя name неразобранной сущности, и функция возвращает для нее идентификатор. В следующем примере (листинг 8.6) я добавил в planets.xml
DTD и объявил три неразобранных сущности, соответствующих рисункам планет — image1
, image2
и image3
, — и обратился к ним, добавив в каждый элемент атрибут IMAGE
.
Листинг 8.6. planets.xml с неразобранными сущностями
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
.
.
.
Заметьте, что некоторые процессоры XSLT не могут осуществлять выборку по ID, потому что они не читают объявления DTD и схему XML. Это одна из задач, которые призван решить XSLT 2.0 — сделать доступной информацию об идентификаторах.
Функция last
возвращает число узлов в наборе узлов, поэтому ее значение равно позиции последнего узла. Она применяется следующим образом:
number last()
Следующий пример из главы 5 последовательно выводит в результирующий документ имена планет. Однако я хочу, чтобы выводилось не просто «The first three planets are: Mercury Venus Earth» (первые три планеты: Меркурий Венера Земля), a «The first three planets are: Mercury, Venus, and Earth.» Необходимые знаки пунктуации можно добавить, определяя элемент, с которым мы работаем, при помощи функции position и проверяя позицию при помощи :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
,
and
.
Вот результат:
The Planets
The first three planets are: Mercury, Venus, and Earth.
Функция local-name
возвращает локальное (неполное) имя узла. Функция применяется следующим образом:
string local-name(node-set?)
В функцию передается набор узлов с единственным узлом, и функция возвращает локальное имя этого узла. (Если в наборе узлов больше, чем один узел, берется только первый.) Если не передать никаких узлов, функция вернет локальное имя контекстного узла.
В следующем примере я создаю новые элементы при помощи и определяю имена контекстных узлов при помощи local-name
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Функция name
аналогична local-name
, за тем исключением, что она возвращает полностью определенное имя узла. Вот как следует применять эту функцию:
string name(node-set?)
Функция namespace-uri
возвращает строку, содержащую URI пространства имен в расширенном имени узла. Как правило, это URI в объявлении пространства имен, установленное при помощи атрибутов xmlns
или xmlns:prefix
. Функция применяется следующим образом (заметьте, что эту функцию можно применять только к элементам или атрибутам, результатом обработки остальных узлов будет пустая строка):
string namespace-uri(node-set?)
Например, в planets.xml
я могу добавить пространство имен «star» (звезда):
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
.
.
.
И я могу найти URI этого пространства имен в таблице стилей при помощи namespace-uri
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:star="http://www.starpowder.com">
.
.
.
Вот результат:
http://starpowder.com
Функция position
возвращает позицию контекстного узла:
number position()
С этой функцией мы встречались на протяжении всей книги. Такой пример вы уже видели раньше в этой главе, в нем для создания предложения «The first three planets are: Mercury, Venus, and Earth.» используются функции last
и position
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
Читать дальше