контекстного узла, только если у этого ребенка есть атрибут
UNITS
со значением "
days
", — что также можно записать как
PLANET[@UNITS="days"][6]
;
•
PLANET[@COLOR and @UNITS]
выбирает всех детей
<PLANET>
контекстного узла, имеющих оба атрибута
COLOR
и
UNITS
;
•
*[1][NAME]
выбирает любой элемент
<NAME>
, являющийся первым ребенком своего родителя;
•
*[position < 5]
выбирает первые пять детей контекстного узла;
•
*[position < 5][@UNIT]
выбирает первые пять детей контекстного узла с атрибутом
UNITS
;
•
text
выбирает все дочерние текстовые узлы контекстного узла;
•
text[starts-with(., "In the course of human events")]
выбирает все дочерние текстовые узлы контекстного узла, начинающиеся с "
In the course of human events
";
•
/PLANETS[@UNITS="million miles"]
выбирает все элементы
PLANETS
, у которых значение атрибута
UNITS
равно "
million miles
";
•
PLANET[/PLANETS/@UNITS=@REFERENCE]
выбирает все элементы
<PLANET>
, у которых значение атрибута
REFERENCE
такое же, как значение атрибута
UNITS
элемента
PLANETS
в корне документа;
•
PLANET/*
выбирает все дочерние элементы элементов
PLANET
;
• PLANET/*/DAY выбирает все элементы DAY — правнуки элементов PLANET, являющиеся детьми контекстного узла;
•
*/*
выбирает элементы-внуки текущего элемента;
•
astrophysics:PLANET
выбирает элемент
PLANET
в пространстве имен «
astrophysics
»;
•
astrophysics:*
выбирает любые элементы в пространстве имен «
astrophysics
»;
•
PLANET[DAY and DENSITY]
выбирает все элементы
<PLANET>
, у которых есть по крайней мере один элемент
<DAY>
и один элемент
<DENSITY>
;
•
PLANET[(DAY or DENSITY) and MASS]
выбирает все элементы
<PLANET>
, у которых есть по крайней мере один элемент
<DAY>
или один элемент
<DENSITY>
, а также по крайней мере один элемент
<MASS>
;
•
PLANET[DAY and not(DISTANCE)]
выбирает все элементы
<PLANET>
, у которых есть по крайней мере один элемент
<DAY>
и нет элементов
<DISTANCE>
;
•
PLANET[MASS=/STANDARD/REFERENCE/MASS]
выбирает все элементы
<PLANET>
, у которых значение элемента
<MASS>
равно значению элемента
/<STANDARD>/<REFERENCE>/<MASS>
.
На этом мы завершаем в данный момент рассмотрение образцов выбора; связанный материал приводится в главе 7 при рассмотрении выражений XPath. Глава 5 начинается с изучения способов работы с данными в XML-документах путем сортировки и принятия решения на основе значений данных.
Глава 5
Принятие решений и сортировка данных
Эта глава посвящена принятию решений, сортировке и различным способам обработки данных в ХМL-документах. Мы рассмотрим элементы
<xsl:if>
,
<xsl:choose>
,
<xsl:when>
,
<xsl:otherwise>
,
<xsl:for-each>
и
<xsl:sort>
, при помощи которых вы сможете обрабатывать данные и управлять выполнением преобразования в зависимости от значения данных.
Однако эти элементы не предоставляют такой точности, как в языках программирования. Поэтому я также представлю в этой главе расширения XSLT, в том числе элемент рабочего проекта XSLT 1.1
<xsl:script>
. Этот элемент был предназначен для упрощения применения Java и JavaScript с процессором XSLT. (Для чтения этой книги нет необходимости владеть Java или JavaScript, но если вы знаете эти языки, вам будет приятно удостовериться, что некоторые процессоры XSLT дают возможность использовать их при преобразованиях XML.) Нечто похожее на этот элемент обязательно появится в XSLT 2.0. При помощи расширений вы можете расширять спецификацию XSLT, добавляя в XSLT новые элементы и функции какого-либо производителя или свои собственные.