Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
The Planets
The first three planets are: Mercury, Venus, and Earth.
Функции XPath для работы со строками
В XSLT доступны следующие функции XPath для работы со строками:
• concat(string string1, string string2,...)
. Возвращает конкатенацию (объединение) всех переданных ей строк;
• contains(string string1, string string2)
. Возвращает истину, если первая строка содержит (contains) вторую строку;
• normalize-space(string string1)
. Возвращает строку string1
(или контекстный узел, если строки string1
нет) после отбрасывания лидирующих и завершающих символов-разделителей и замены нескольких последовательных разделителей на один пробел;
• starts-with(string string1, string string2)
. Возвращает истину, если первая строка начинается (starts with) со второй подстроки;
• string(object)
. Преобразует объект в строку;
• string-length(string string1)
. Возвращает количество символов в строке string1
;
• substring(string string1, number offset, number length)
. Возвращает length
символов из строки, начиная со смещения offset
;
• substring-after(string string1, string string2)
. Возвращает часть строки string1
после первого вхождения string2
;
• substring-before(string string1, string string2)
. Возвращает часть строки string1
вплоть до первого вхождения строки string2
;
• translate(string string1, string string2, string string3)
. Возвращает строку string1
, в которой все вхождения символов в строке string2
заменены на соответствующие символы в строке string3
;
В последующих разделах я рассмотрю каждую из этих функций.
concat()
Функция concat
объединяет вместе все переданные ей строки и возвращает полученную строку:
concat(string string1, string string2, ...)
В качестве примера рассмотрите разработанный ранее вариант таблицы стилей planets.xsl
, отображающей значения элементов и значения атрибутов UNITS
, в котором шаблоны применяются следующим образом:
Такой код отображает строковое значение, контекстный узел, пробел и строковое значение атрибута UNITS. Но код можно значительно сократить при помощи функции concat
(листинг 8.8).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
contains()
Функция contains
проверяет, содержится ли одна строка внутри другой; если это так, функция возвращает истину, если нет — ложь. Функция применяется следующим образом:
boolean contains(container-string, contained-string)
Следующий пример взят из главы 7; в этом случае я хочу осуществить поиск слова «miles» во всех атрибутах, и если оно будет найдено, добавить в результирующий документ текст «You should switch to kilometers.» (Нужно перевести в километры.):
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
.
.
.
You should switch to kilometers.
Вот результирующий документ:
The Planets Table
The Planets Table
Name | Mass | Radius | Day | Distance |
Mercury | .0553 (Earth = 1) | 1516 You should switch to kilometers. | 58.65 days | 43.4 You should switch to kilometers. |
Venus | .815 (Earth = 1) | 3716 You should switch to kilometers. | 116.75 days | 66.8 You should switch to kilometers. |
Earth | 1 (Earth = 1) | 2107 You should switch to kilometers. | 1 days | 128.4 You should switch to kilometers. |
normalize-space()
Функция
normalize-space
удаляет лидирующие и завершающие символы-разделители и сжимает все внутренние идущие подряд разделители в один пробел, возвращая полученную строку. Функция применяется следующим образом:
string normalize-space(string?)
В следующем примере я добавил дополнительные пробелы в атрибут UNITS
элемента Меркурия:
Mercury
.0553
58.65
1516
.983
43.4
.
.
.
Функция normalize-space
поможет удалить лишние пробелы в таблице стилей:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
.
.
.
И вот результат — обратите внимание на то, что лишние пробелы убраны:
The Planets Table
The Planets Table
.
.
.
starts-with()
Как можно догадаться по имени (начинается с), функция starts-with
проверяет, начинается ли одна строка с другой.
boolean starts-with(string-to-examine, possible-start-string)
В этом примере из главы 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 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">
Интервал:
Закладка: