Образцы шага, часть 1: оси образца
Образцы шага, часть 1: оси образца
Оси — первая часть образцов шага. Например, в образце шага child::NAME, ссылающемся на элемент <NAME>, дочерний по отношению к контекстному узлу, child называется осью. У образцов две оси:
• ось attribute содержит атрибуты контекстного узла;
• ось child содержит детей контекстного узла. Если ось явно не задана, ось child будет осью по умолчанию.
При помощи осей можно задать шаг расположения (location path) или путь, как в следующем примере, в котором ось child используется для задания выбора дочерних узлов контекстного узла, элемента <PLANET>:
<xsl:template match="PLANET">
<HTML>
<CENTER>
<xsl:value-of select="child::NAME"/>
</CENTER>
<CENTER>
<xsl:value-of select="child::MASS"/>
</CENTER>
<CENTER>
<xsl:value-of select="child::DAY"/>
</CENTER>
</HTML>
</xsl:template>
Рассмотрим ряд примеров применения осей:
• child::PLANET. Возвращает дочерние элементы <PLANET> контекстного узла;
• child::*. Возвращает все дочерние элементы контекстного узла (* выбирает только элементы);
• attribute::UNITS. Возвращает атрибут UNITS контекстного узла;
• child::*/child::PLANET. Возвращает всех внуков <PLANET> контекстного узла.
Хотя, судя по этим примерам, кажется, что можно применять только оси детей и атрибутов, на практике это не совсем так. Когда требуется указать детей, возможности оси child несколько ограничены, потому что необходимо указывать каждый уровень, который необходимо выбрать — например "child::PLANETS/child::PLANET/child::MASS" выбирает элемент <MASS>, дочерний по отношению к элементу <PLANET>, который, в свою очередь, дочерний по отношению к <PLANETS>. Если вам требуется выбрать все элементы <MASS>, появляющиеся в любом месте элемента <PLANETS>, детей, внуков, правнуков и т.д., кажется, что нет способа сделать это в одном образце. В XPath это можно сделать при помощи выражения наподобие "child::PLANETS/descendant::MASS", но в образцах нельзя использовать ось потомков (descendant). Помните, однако, что в этих же целях можно применить операцию //. Например, образец "child::PLANETS//child::MASS" выбирает все элементы <MASS> в любом месте внутри элемента <PLANETS>.
Следующий пример (листинг 4.2) демонстрирует работу этого образца, заменяя текст во всех элементах <MASS> независимо от того, где они находятся внутри элемента <PLANETS>, на текст "Very heavy!". Для того чтобы скопировать в результирующий XML-документ все остальные узлы planets.xml, я также установил правило, выбирающее любой узел при помощи условия узла (node test) node, с которым мы познакомимся позже. Заметьте, что, хотя образец, выбирающий любой узел, также выбирает все элементы <MASS>, образец "child::PLANETS//child::MASS" гораздо более специален — поэтому, как объяснялось в главе 3, процессор XSLT задаст ему более высокий приоритет для элементов <MASS>.
Листинг 4.2. Выбор элементов <MASS>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="child::PLANETS//child::MASS">
<MASS>
Very heavy!
</MASS>
</xsl:template>
</xsl:stylesheet>
А вот результирующий XML-документ:
<?xml version="1.0" encoding-"UTF-8"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS>
Very heavy!
</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--В перигелии->
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS>
Very heavy!
</MASS>
<DAY UNITS="days">116.75</DAY>
<RADIUS UNITS="miles">3716</RADIUS>
<DENSITY UNITS="(Earth = 1)">.943</DENSITY>
<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->
</PLANET>
<PLANET>
<NAME>Earth</NAME>
<MASS>
Very heavy!
</MASS>
<DAY UNITS="days">1</DAY>
<RADIUS UNITS="miles">2107</RADIUS>
<DENSITY UNITS="(Earth = 1)">1</DENSITY>
<DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->
</PLANET>
</PLANETS>
При задании осей в образцах можно воспользоваться рядом сокращений, применяемых практически повсеместно.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Образцы шага, часть 2: условия узла
Образцы шага, часть 2: условия узла Условия узла (node test) составляют вторую часть образцов шага. В качестве условий узла можно использовать названия узлов или символ подстановки * для выбора и узлов, и их типов. Например, выражение child::*/child::NAME выбирает все элементы <NAME>,
Три шага к свободному ПО
Три шага к свободному ПО Не все знают, что стоимость проприетарного (коммерческого) программного обеспечения, способного превратить «компьютерное железо» в современный компьютер, значительно больше стоимости самого «железа». Не знают зачастую потому, что используют
Определение шага привязки
Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ее узлам. Активность
Задание шага цикла
Задание шага цикла Полный синтаксис оператора For. . .Next включает необязательное ключевое слово Step (шаг) в первой строке структуры, как, например, в следующем фрагменте программного кода: Sub ListOddNumbers() Dim strOddNumbers As String For F = 1 To 33 Step 2 StrOddNumbers = strOddNumbers 5 F & " " Next F MsgBox "Нечетными
Определение шага привязки
Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ним. Активность режима
9.2. Три шага разрешения перегрузки
9.2. Три шага разрешения перегрузки Разрешением перегрузки функции называется процесс выбора той функции из множества перегруженных, которую следует вызвать. Этот процесс основывается на указанных при вызове аргументах. Рассмотрим пример:T t1, t2;void f( int, int );void f( float, float );int
Бесплатные образцы
Бесплатные образцы Раздавайте что-нибудь бесплатноМир полон шума и суеты. Чтобы вас заметили среди всего этого, раздавайте что-нибудь бесплатно.Умные компании знают, что раздача подарков — замечательный способ завоевать благосклонность клиентов. Посмотрите на
Определение шага привязки
Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ее узлам. Активность
Определение шага привязки
Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ее узлам.Шаговая
Кафедра Ваннаха: Экобомба германского образца Ваннах Михаил
Кафедра Ваннаха: Экобомба германского образца Ваннах Михаил Опубликовано 06 мая 2011 года В США был Трёхмильный остров. В СССР — Чернобыль. У японцев — Фукусима. А вот в Европе ядерная энергетика работала беспроблемно и безаварийно. Пока. Но, согласно
Кафедра Ваннаха: Цифровая шарага китайского образца Ваннах Михаил
Кафедра Ваннаха: Цифровая шарага китайского образца Ваннах Михаил Опубликовано 31 мая 2011 года Есть одно распространенное мнение, что прогресс технологический обязательно повлечет за собой прогресс социальный. Нравы будут смягчаться, мораль
Образцы проектов (design patterns)
Образцы проектов (design patterns) В середине девяностых годов специалистов привлекла идея образцов (или шаблонов) проектов. Образец - это архитектурный принцип, применимый во многих прикладных областях; следуя образцу можно построить решение некоторой проблемы.(Образец
Microsoft Bob: рабочий стол образца 1995-го Евгений Лебеденко, Mobi
Microsoft Bob: рабочий стол образца 1995-го Евгений Лебеденко, Mobi Опубликовано 01 февраля 2011 года Знаете ли вы, как зовут пса породы золотистый ретривер, который появляется, когда вы выбираете функцию поиска в Windows XP? Нет? Знакомьтесь: Ровер — заслуженный ветеран компании Microsoft. Этот
Глава 8 Образцы, экземпляры и библиотеки
Глава 8 Образцы, экземпляры и библиотеки В предыдущих главах мы много рисовали, редактировали, стирали, трансформировали, преобразовывали — в общем, не теряли времени даром. В этой главе мы рисовать не будем. Хватит, научились и рисовать, и править нарисованное, и даже
Полицейский автомобиль образца 2020 года Николай Маслухин
Полицейский автомобиль образца 2020 года Николай Маслухин Опубликовано 30 декабря 2013 Полиция города Нью-Йорк развернула целую кампанию по переоснащению своих транспортных средств под названием NYPD2020. В течение года специальный департамент
Кафедра Ваннаха: Цифровая шарага китайского образца
Кафедра Ваннаха: Цифровая шарага китайского образца Автор: Ваннах МихаилОпубликовано 31 мая 2011 годаЕсть одно распространенное мнение, что прогресс технологический обязательно повлечет за собой прогресс социальный. Нравы будут смягчаться, мораль крепчать, люди