Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
□ attribute::*
— выберет все атрибуты контекстного узла;
□ attribute::href
— выберет атрибут href
контекстного узла, если он существует;
□ parent::*
— выберет родительский узел контекстного узла, если тот является элементом, и пустое множество, если родительский узел имеет другой тип, например является корнем дерева;
□ parent::node()
— выберет родительский узел контекстного узла вне зависимости от его типа. Единственный случай, когда этот шаг выберет пустое множество — это когда контекстный узел является корневым узлом документа;
□ parent::xsl:template
— выберет родительский узел, если тот является элементом с именем template и имеет пространство имен с префиксом xsl
, иначе выберет пустое множество;
□ self::*
— выберет контекстный узел, если он является элементом и пустое множество узлов, если контекстный узел имеет другой тип;
□ self:*
— выберет все дочерние элементы контекстного узла, принадлежащие пространству имен с префиксом self
;
□ self::text()
— выберет контекстный узел, если он является текстовым узлом;
□ self::node()
— выберет контекстный узел вне зависимости от его типа;
□ self::query
— выберет контекстный узел, если он является элементом с именем query
, и пустое множество, если контекстный узел имеет другое имя или не является элементом;
□ preceding::para
— выберет все элементы para
, которые предшествуют контекстному узлу в порядке просмотра документа;
□ preceding::comment()
— выберет все узлы комментариев, которые предшествуют контекстному узлу в порядке просмотра документа;
□ preceding-sibling::*
— выберет все братские (принадлежащие тому же родителю) элементы контекстного узла, которые предшествуют ему в порядке просмотра документа;
□ following::processing-instruction('fop')
— выберет все узлы инструкций по обработке, которые имеют имя (целевое приложение) "fop"
и следуют за контекстным узлом в порядке просмотра документа;
□ following-sibling::text()
— выберет все текстовые узлы, которые являются братьями контекстного узла и следуют за ним в порядке просмотра документа;
□ descendant::*
— выберет все элементы-потомки контекстного узла;
□ descendant::node()
— выберет все узлы-потомки контекстного узла;
□ descendant::b
— выберет все элементы b
, являющиеся потомками контекстного узла;
□ descendant-or-self::*
— выберет все элементы-потомки контекстного узла, а также сам контекстный узел, если он также является элементом;
□ ancestor::*
— выберет все элементы, которые являются предками контекстного узла; выбранное множество не будет включать корневой узел, поскольку он не является элементом;
□ ancestor::node()
— выберет все узлы, являющиеся предками контекстного узла; выбранное множество будет включать корневой узел (за исключением того случая, когда контекстный узел сам является корневым);
□ ancestor::p
— выберет все элементы p
, являющиеся предками контекстного узла;
□ ancestor-or-self::node()
— выберет контекстный узел, а также все узлы, являющиеся его предками. Выбранное этим шагом множество будет всегда включать корневой узел;
□ ancestor-or-self::body
— выберет все элементы body
, которые являются предками контекстного узла, а также сам контекстный узел, если он является элементом body
;
□ namespace::*
— выберет все узлы пространств имен, ассоциированные с контекстным узлом; это множество будет, как минимум, содержать узел пространства имен xml
;
□ namespace::xyz
— выберет узел пространства имен, определяемого префиксом xyz
; поскольку один префикс может соответствовать только одному пространству, возвращаемое множество будет содержать не более одного узла.
Шаги выборки с предикатами:
□ child::*[1]
— выберет первый дочерний элемент контекстного узла; этот шаг выборки равносилен child::*[position()=1]
;
□ child::p[1]
— выберет первый дочерний элемент p контекстного узла; этот шаг выборки равносилен child::p[position()=1]
;
□ child::*[last()]
— выберет последний дочерний узел контекстного узла; этот шаг выборки равносилен child::*[position()=last()]
;
□ child::*[last()-1]
— выберет предпоследний дочерний узел контекстного узла; этот шаг выборки равносилен шагу child::*[position()=last()]
. Если контекстный узел имеет только один дочерний элемент, выбираемое множество будет пустым;
□ child::p[position() mod 2 = 0]
— выберет все четные элементы p
;
□ child::p[position() mod 2 = 1]
— выберет все нечетные элементы p
;
□ child::а[2][attribute::name='b']
— Выберет второй дочерний элемент а
контекстного узла, если он имеет атрибут name
со значением "b"
;
□ child::a[attribute::name='b'][2]
— выберет второй дочерний элемент а контекстного узла из тех, которые имеют атрибут name
со значением "b"
; этот шаг выборки отличается от шага выборки в предыдущем примере — порядок следования предикатов имеет значение;
□ child::a[position()=$i]
— выберет дочерний элемент а
, позиция которого равна значению переменной i
;
□ parent::*['root']
— выберет родительский узел контекстного узла, если он является элементом; если он является корнем документа, этот шаг выборки не выберет ничего; предикат ['root']
не имеет никакого действия, поскольку строка 'root'
как непустая строка тождественно преобразуется в истину;
□ preceding-sibling::*[attribute::*]
— выберет все братские узлы контекстного узла, которые предшествуют ему, являются элементами и содержат, по крайней мере, один атрибут;
□ preceding-sibling:p[1]
— выберет ближайший (первый в обратном порядке просмотра) элемент p, который предшествует контекстному узлу;
□ following::а[attribute::href][not(descendant::img)]
— выберет все узлы, которые следуют за контекстным в порядке просмотра документа, являются элементами с именем а
, имеют атрибут href
, но не имеют элементов-потомков с именем img
;
□ ancestor::node()[2]
— выберет второго предка (то есть "деда") контекстного узла;
□ descendant-or-self::a[attribute::href]
— выберет контекстный узел, а также все узлы-потомки контекстного узла, если они являются элементами с именем а
и имеют атрибут href
;
□ namespace::*[contains(self::node(), 'XML')]
— выберет узлы пространств имен, которые ассоциируются с контекстным узлом, и строковое значение (URI) которых содержит подстроку 'XML'
.
Использование сокращенного синтаксиса в шагах выборки:
□ table
— выберет все дочерние элементы table
контекстного узла; этот шаг выборки равносилен child::table
;
□ @*
— выберет все атрибуты контекстного узла; полная версия этого шага выборки выглядит как attribute::*
;
□ *[i]
— выберет первый дочерний элемент контекстного узла; этот шаг выборки равносилен шагу child::*[position()=1]
;
Интервал:
Закладка: