В этом примере из главы 4 при помощи starts-with
выбираются текстовые узлы, текст в которых начинается с «Е», для того чтобы выбрать Earth (Землю). Затем в описание Земли добавляется текст «(the World)» (мир), и получается «Earth (the World)»:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Name |
Mass |
Radius |
Day |
Mercury |
.0553 (Earth = 1) |
1516 miles |
58.65 days |
.
.
.
|
|
|
|
(the World)
Вот результат — заметьте, что подпись для Земли теперь выглядит как «Earth (the World)»:
The Planets Table
The Planets Table
.
.
.
Name |
Mass |
Radius |
Day |
Earth (the World |
1 (Earth = 1) |
2107 miles |
1 days |
Функция string
просто преобразует переданный ей объект в строку. Функция применяется следующим образом:
string string(object?)
Как правило, необходимости в данной функции не возникает, потому что преобразования такого рода осуществляются автоматически. Мне на ум приходит всего несколько примеров, когда эта функция действительно нужна. Пусть, например, по какой-то причине вы поместили в каждый элемент в planets.xml
по три элемента и хотите использовать в качестве фактического названия планеты только первый элемент :
Mercury
Venus
Earth
.0553
58.65
1516
.983
43.4
Venus
Earth
Mercury
Planet of Love.
.815
116.75
3716
.943
66.8
Earth
Mercury
Venus
The planet you're standing on.
1
1
2107
1
128.4
Предположим теперь, что вам нужно выбрать определенную планету, например, Венеру (Venus). Такая проверка не пройдет, потому что NAME
вернет набор узлов из всех дочерних элементов контекстного узла, а так как у каждой планеты есть элемент со значением «Venus», такое условие всегда будет истиной:
|
|
|
|
Для того чтобы проверить первый элемент в каждом элементе , можно воспользоваться функцией string
, поскольку она возвращает не набор узлов, а строку:
xmlns:xsl="http://www w3.org/1999/XSL/Transform">
.
.
.
|
|
|
|
.
.
.
Конечно, если нужно только выбрать первый дочерний элемент контекстного узла, проще воспользоваться NAME[1]
.
Как можно предположить, функция string-length
возвращает длину (length) переданной ей строки. Функция применяется таким образом:
number string-length(string?)
В следующем примере я определяю длину названия каждой планеты при помощи string-length
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Length of Planet Names
is
characters long.
А вот результат:
Length of Planet Names
Length of Planet Names
Mercury is 7 characters long.
Venus is 5 characters long.
Earth is 5 characters long.
Этот результирующий документ показан на рис. 8.2.
Рис. 8.2.Определение длины строк в XSLT
Функция substring
возвращает подстроку переданной ей строки. Функция применяется следующим образом:
string substring(source-string, start-position, number-of-characters?)
Функция принимает параметры source-string
(исходная строка), start-position
(начальная позиция) и необязательный параметр number-of-characters
(количество символов). Функция возвращает подстроку исходной строки с начальной позиции и до указанного количества символов или до конца строки, если это количество не задано.
Функция substring
— одна из трех функций, оперирующих с подстроками: substring-before
, возвращающая строку перед найденной подстрокой, сама substring
, возвращающая заданную подстроку, и substring-after
, возвращающая строку после найденной подстроки. В следующем примере (листинг 8.9) задействованы все три функции: в этом случае я разбил название планеты Меркурий (Mercury) на три подстроки — «Mer», «c» и «ury» — и затем объединил их снова. Вот как это можно сделать при помощи трех рассматриваемых функций (дополнительная информация о substring-before
и substring-after
приведена в следующих двух разделах).
Читать дальше