Вход/Регистрация
XSLT
вернуться

Холзнер Стивен

Шрифт:

• условие узла

comment
выбирает узлы комментария;

• условие узла

node
выбирает узел любого типа;

• условие узла

processing-instruction
выбирает узел инструкции обработки. В скобках можно указать название выбираемой инструкции обработки;

• условие узла

text
выбирает текстовый узел

Например, в листинге 7.2 таблица стилей находит в документе все комментарии при помощи условия узла

comment
и создает для каждого комментария новый,
<!--Warning:comment found!-->
(Внимание! Найден комментарий!).

Листинг 7.2. Выбор комментариев

<?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="/">

<xsl:for-each select="descendant::comment">

<xsl:comment>Warning: comment found!</xsl:comment>

</xsl:for-each>

 </xsl:template>

</xsl:stylesheet>

При применении этой таблицы стилей к

planets.xml
получается следующий документ:

<?xml version="1.0" encoding="UTF-8"?>

<!--Warning: comment found!-->

<!--Warning: comment found!-->

<!--Warning: comment found!-->

Шаги расположения XPath, часть 3: предикаты

Предикат в шаге расположения XPath сам содержит заключенное в скобки выражение XPath, которое вычисляется в истину или ложь. Когда результатом вычисления выражения является строка, XPath считает ее истиной, если строка не пуста. Когда результат — набор узлов, XPath считает его истиной, если он не пуст. Когда результат — число, то общий результат будет считаться истиной, если это число совпадает с контекстной позицией — например,

PLANET[3]
будет истиной тогда и только тогда, когда истиной будет
PLANET[position=3]
.

Предикаты содержат выражения XPath наподобие тех, которые встречались нам на протяжении этой главы: редко когда выражение возвращает набор узлов, главным образом возвращаются строки, числа или логические значения. Например, путь расположения

preceding-sibling::MASS[position*4]
выбирает четыре предыдущих элемента-брата
<MASS>
для контекстного узла.

Применение осей XPath

К этому моменту мы рассмотрели три части шагов расположения — ось, условие узла и предикат. Вы должны быть знакомы с этими элементами по проделанной нами работе с образцами выбора, но обратите внимание на ось в предыдущем примере —

preceding-sibling
. До сих пор мы видели только оси, выбиравшие образцы XSLT — оси
child
и
attribute
; теперь же мы рассмотрим новые оси, возможные в полных выражениях XPath, и начнем с оси
ancestor
.

Применение оси ancestor

Ось

ancestor
(предок) содержит всех предков контекстного узла, включая родителей, дедушек, прадедушек и т.д. Эта ось всегда содержит корневой узел — если только контекстным узлом не является сам корневой узел.

Взгляните на листинг 7.3, в котором при помощи оси

ancestor
осуществляется поиск имен (хранимых в элементе
<NAME>
) всех предков элементов
<MASS>
.

Листинг 7.3. Применение оси ancestor

<?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="MASS">

<xsl:for-each select="ancestor::*">

<xsl:value-of select="./NAME"/>

</xsl:for-each>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:apply-templates select="MASS"/>

 </xsl:template>

</xsl:stylesheet>

Вот результат применения этой таблицы стилей к

planets.xml
:

<?xml version="1.0" encoding="utf-8"?>

Mercury

Venus

Earth

Применение оси ancestor-or-self

Ось

ancestor-or-self
содержит всех предков контекстного узла, а также сам контекстный узел. Это означает, помимо прочего, что такая ось всегда содержит корневой узел.

  • Читать дальше
  • 1
  • ...
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: