Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Использовать функцию translate
с переменными lowercase
и uppercase
можно следующим образом:
translate('Дом', $uppercase, $lowercase)
→ 'дом'
translate('Дом', $lowercase, $uppercase)
→ 'ДОМ'
Именованные шаблоны можно вызывать элементом xsl:call-template
, передавая параметр при помощи xsl:with-param
. Например, следующий фрагмент шаблона
...
>
...
создаст в выходящем дереве текстовый узел со значением " дом
".
Функции множеств узлов
Функции last и position
number last()
number position()
Функция last
возвращает текущий размер контекста — число, которое показывает, сколько узлов находится в обрабатываемом в данный момент множестве.
Функция position
возвращает позицию контекста — число, показывающее порядковый номер контекстного узла в обрабатываемом множестве.
В этом примере мы будем заменять все элементы элементами вида
...
где атрибут name
будет содержать имя, a position
— через дробь позицию элемента в контексте и размер контекста.
<���а>
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Отметим, что если бы мы не удаляли лишние пробельные символы во входящем документе при помощи элемента xsl:strip-space
, в контексте преобразования учитывались бы также и текстовые узлы, которые им соответствуют. Выходящий документ без этого элемента имел бы следующий вид:
Функция count
number count( node-set )
Функция count
возвращает число узлов, которое входит во множество, переданное ей в качестве аргумента.
Для того чтобы подсчитать количество всех элементов второго уровня, можно воспользоваться выражением count(/*/*)
. Например, для входящего документа из примера к функциям last
и position
(листинг 6.7) это выражение примет значение 3
.
Приведем несколько других примеров, используя тот же документ.
Покажем, что дерево документа на листинге 6.7 имеет ровно один корневой узел:
count(/)
→ 1
и ровно один элемент, находящийся в корне:
count(/*)
→ 1
Подсчитаем количество текстовых узлов, принадлежащих элементу a
(это те самые пробельные текстовые узлы, которые были удалены элементом xsl:strip-space
):
count(/a/text())
→ 4
Подсчитаем общее количество элементов в документе:
count(//*)
→ 6
Функции local-name , namespace-uri и name
string local-name( node-set ?)
string namespace-uri( node-set ?)
string name( node-set ?)
Функция local-name
возвращает локальную часть имени первого в порядке просмотра документа узла множества, переданного ей в качестве аргумента. Эта функция выполняется следующим образом.
□ Если аргумент опущен, то значением функции по умолчанию является множество, содержащее единственный контекстный узел. Иными словами, функция возвратит локальную часть расширенного имени контекстного узла (если она существует).
□ Если аргументом является пустое множество, функция возвращает пустую строку.
□ Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, функция возвращает пустую строку.
□ В противном случае функция возвращает локальную часть расширенного имени первого в порядке просмотра документа узла переданного множества.
Функция namespace-uri
работает совершенно аналогично функции local-name
за тем исключением, что возвращает не локальную часть расширенного имени, a URI пространства имен этого узла. Эта функция выполняется следующим образом.
□ Если аргумент опущен, его значением по умолчанию является множество, содержащее единственный контекстный узел.
□ Если аргументом является пустое множество, функция возвращает пустую строку.
□ Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, функция возвращает пустую строку.
□ Если первый в порядке просмотра документа узел переданного множества не принадлежит никакому пространству имен, функция возвращает пустую строку.
□ В противном случае функция возвращает URI пространства имен первого в порядке просмотра документа узла переданного множества.
Функция name
возвратит имя вида QName
, которое будет соответствовать расширенному имени первого в порядке просмотра документа узла переданного ей множества.
Это имя должно соответствовать расширенному имени узла, то есть должны совпадать локальные части и пространства имен. Вместе с тем, это вовсе не означает, что префиксы также будут совпадать. Например, если в элементе определены несколько префиксов для одного пространства, функция name
может использовать любой из них.
Для следующего элемента
xmlns:a="http://www.a.com"
xmlns:b="http://www.a.com"
xmlns:c="http://www.a.com"/>
функция name
может вернуть a:body
, b:body
или c:body
.
Большинство процессоров все же возвращает префикс, с которым узел был объявлен.
Так же как local-name
и namespace-uri
, функция name имеет следующие особенности использования.
□ Если аргумент опущен, то его значением по умолчанию является множество, содержащее единственный контекстный узел.
□ Если аргументом является пустое множество, то функция возвращает пустую строку.
□ Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, то функция возвращает пустую строку.
□ В противном случае функция возвращает имя вида QName
, соответствующее расширенному имени первого в порядке просмотра документа узла переданного множества.
Мы можем видоизменить преобразование, приведенное в примере к функциям last
и position
(листинг 6.7), чтобы генерируемые элементы содержали информацию об имени, пространстве имен и локальной части имени элементов.
xmlns:a="http://www.a.com"
xmlns:b="http://www.b.com">
version="1.0"
xmlns:xsl="http: //www.w3.org/1999/XSL/Transform"
xmlns:a="http://www.a.com"
xmlns:b="http://www.b.com">
name="{name()}"
namespace-uri="{namespace-uri()}"
local-name="{local-name()}">
xmlns:a="http://www.a.com"
xmlns:b="http://www.b.com"
name="a:a"
Интервал:
Закладка: