Алексей Валиков - Технология XSLT

Тут можно читать онлайн Алексей Валиков - Технология XSLT - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство БХВ-Петербург, год 2002. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Технология XSLT
  • Автор:
  • Жанр:
  • Издательство:
    БХВ-Петербург
  • Год:
    2002
  • Город:
    Санкт-Петербург
  • ISBN:
    нет данных
  • Рейтинг:
    4.75/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Алексей Валиков - Технология XSLT краткое содержание

Технология XSLT - описание и краткое содержание, автор Алексей Валиков, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.

Для начинающих и профессиональных программистов

Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)

Технология XSLT - читать книгу онлайн бесплатно, автор Алексей Валиков
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

*[last()]— выберет последний дочерний узел контекстного узла; этот шаг выборки равносилен шагу child::*[position()=last()];

descendant-or-self::a[@href]— выберет контекстный узел, а также все узлы-потомки контекстного узла, если они являются элементами с именем а и имеют атрибут href; этот шаг выборки эквивалентен шагу descendant-or-self::a[attribute::href]; еще короче его можно записать как .//a[@href];

following::a[@href][not(@target)]— выберет все узлы, которые следуют в порядке просмотра документа за контекстным узлом, являются элементами с именем а, имеют атрибут href, но не имеют атрибута target; этот шаг эквивалентен шагу following::a[attribute::href][not(attribute::target)];

..— выберет родительский узел контекстного узла; этот шаг выборки эквивалентен шагу parent::node();

namespace::*[contains(., 'XML')]— выберет узлы пространств имен, которые ассоциируются с контекстным узлом, и строковое значение (URI) которых содержит подстроку 'XML'. Этот шаг выборки эквивалентен шагу namespace::*[contains(self::node(), 'XML')];

preceding-sibling::*[@*]— выберет все братские узлы контекстного узла, которые предшествуют ему, являются элементами и содержат, по крайней мере, один атрибут;

*[not(self::para)]— выберет все дочерние элементы контекстного узла, кроме элементов para;

*[para or chapter]— выберет все дочерние элементы контекстного узла, которые имеют хотя бы один дочерний элемент paraили chapter;

*[para and chapter]— выберет все дочерние элементы контекстного узла, которые имеют хотя бы один дочерний элемент para и хотя бы один дочерний элемент chapter;

*[para][chapter]— выберет все дочерние элементы контекстного узла, которыеимеют хотя бы один дочерний элемент paraи хотя бы один дочерний элемент chapter; этот шаг выборки равносилен *[para and chapter], однако в общем случае это неверно;

*[* or @*]— выберет все дочерние элементы, содержащие атрибуты или элементы;

*[not(* or @*)]— выберет все дочерние элементы, не содержащие ни атрибутов, ни элементов;

*[@name or @href]— выберет все дочерние элементы контекстного узла, имеющие хотя бы один из атрибутов nameили href;

@*[count(.|../@href) != count(../@href)]— выберет все атрибуты контекстного узла, кроме атрибутов href;

[local-name() != 'href']— выберет все атрибуты контекстного узла, кроме атрибутов href; это выражение практически аналогично предыдущему (за тем исключением, что в этом способе не учитываются пространства имен).

Примеры путей выборки:

/— выберет корневой узел документа;

/*— выберет элемент, находящийся в корне документа (элемент документа);

ancestor::body/a— выберет все элементы а, принадлежащие всем предкам-элементам bodyконтекстного узла;

/ancestor::body/a— выберет все элементы а, принадлежащие всем предкам-элементам bodyкорневого узла (это будет пустое множество);

//ancestor::body/a— выберет все элементы а, принадлежащие всем предкам-элементам bodyкорневого узла и потомков корневого узла; иными словами, путь //ancestor::bodyвыбирает элементы body, являющиеся предками каких-либо узлов документа, шаг a— дочерние узлы этих элементов; это выражение равносильно выражению //body[node()]/a;

preceding::а/@b— выберет атрибуты bэлементов а, предшествующих контекстному узлу;

/doc/chapter— выберет элементы chapter, принадлежащие элементам doc, которые находятся в корне документа;

//doc/chapter— выберет элементы chapter, которые находятся в любом элементе docдокумента;

doc/chapter— выберет элементы chapter, которые находятся в дочерних элементах docконтекстного узла;

self::node()[ancestor::body[1]]— выберет множество, состоящее из контекстного узла, если во множестве его предков bodyесть первый элемент (иначе — пустое множество); это выражение равносильно выражению self::node()[ancestor::body], поскольку если ancestor::body— непустое множество, то у него будет первый элемент;

*[contains(name(), 'ody')]/*[contains(name(),'able')]— выберет множество элементов, в имени которых присутствует строка "able"при условии, что они принадлежат дочерним элементам контекстного узла, в имени которых присутствует строка "ody";

*[last()]/preceding-sibling::*[2]— выберет второй с конца дочерний элемент контекстного узла. Это выражение равносильно *[last()-2];

*/@*— выберет все атрибуты всех дочерних элементов контекстного узла;

//* [local-name(.) = 'body']— выберет все элементы bodyтекущего документа вне зависимости от их пространств имен.

Паттерны

В языке XSLT определяется подмножество выражений языка XPath, которые называются паттернами (от англ. pattern — образец). Паттерны представляют собой упрощенные пути выборки, которые используются для определения, соответствует ли узел заданному образцу.

Чаще всего паттерны применяются в элементе xsl:templateв атрибуте match. Шаблоны такого типа будут выполняться только для тех узлов, которые удовлетворяют заданному образцу. Например, следующий шаблон будет выполняться только для элементов body, принадлежащих элементу html:

...

Кроме этого, паттерны применяются при нумерации и при определениях ключей.

Паттерны являются сильно упрощенными путями выборки. Единственные оси, которые могут использоваться в паттернах, — это child, attributeи descendant-or-self, причем ось навигации descendant-or-selfможет быть указана только в сокращенном виде оператором " //". То, что в паттернах используются только оси атрибутов и узлов-потомков, позволяет XSLT-процессорам значительно оптимизировать процесс сопоставления узла заданному образцу — ведь теперь даже в самом худшем сценарии не нужно метаться по всему документу, выбирая узлы, содержащиеся в тех или иных осях навигации. Правда, оператор " //" остается не менее опасным — при его проверке может понадобиться перебрать всех предков текущего узла, что может быть весьма и весьма затруднительно (хотя и проще, чем перебор всех потомков).

Хоть паттерны и выглядят как пути выборки, на самом деле механизм их работы несколько иной. Они не выбирают множество узлов, как таковое, они проверяют узлы на соответствие образцу, который они определяют. Это в принципе эквивалентно выбору множества и проверке узла на вхождение в него, но, как правило, так не делается, поскольку такая проверка потребовала бы слишком больших затрат времени. Гораздо дешевле в этом смысле воспользоваться тем фактом, что синтаксис паттернов упрощен, и осей не так много для того, чтобы создать более эффективный алгоритм проверки соответствия узлов. Например, для того чтобы проверить соответствие некоторого узла, назовем его X, паттерну body/a, совершенно необязательно вычислять путь выборки body/aи затем проверять, входит ли узел Xв полученное множество. Достаточно проверить, является ли именем узла " a", а именем его родителя (если он, конечно, есть) — " body".

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Алексей Валиков читать все книги автора по порядку

Алексей Валиков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Технология XSLT отзывы


Отзывы читателей о книге Технология XSLT, автор: Алексей Валиков. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x