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

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

Шрифт:

СОЗДАНИЕ ПОЛНЫХ ВЫРАЖЕНИЙ XPATH

В главе 7 «Работа и изучение XPath» показано, как создавать полные выражения XPath. Полные выражения XPath можно применять в XSLT в следующих местах: в атрибуте select элементов <xsl:apply-templates>, <xsl:value-of>, <xsl:for-each>, <xsl:param>, <xsl:variable>, <xsl:with-param>, <xsl:copy-of> и <xsl:sort>; в значениях шаблонов атрибутов; в атрибуте test элементов <xsl:if> и <xsl:when>; в значении атрибута элемента <xsl:number> и в предикатах образцов выбора.

Чтобы еще больше все усложнить, следует сказать, что выражения XPath можно использовать в специальной, необязательной части (и только в этой части) образцов выбора: в предикатах. Как мы увидим в этой главе, предикаты — это выражения XPath, которые вычисляются либо в значения «истина/ложь», либо в числа, заключаемые в квадратные скобки, [ и ]. Например, образец

PLANET[NAME="Venus"]
выбирает дочерние узлы
<PLANET>
контекстного узла, у которых есть дочерние узлы
<NAME>
с текстом «Venus». Выражения внутри [ и ] представляют собой настоящие выражения XPath с известными ограничениями, которые будут рассмотрены в этой главе.

Безусловно, для создания образцов выбора необходим опыт, поэтому в данной главе приводится много примеров.

MICROSOFT И НЕСТАНДАРТНЫЕ ОБРАЗЦЫ ВЫБОРА

Microsoft поддерживает образцы выбора в своем процессоре XML MSXML3, но есть еще кое-что, о чем вам следует знать: с образцами выбора Microsoft использует также весьма много нестандартного, не используемого W3C синтаксиса. В этой главе я собираюсь придерживаться официальной, W3C, версии, и если вам доведется читать документацию Microsoft об образцах выбора, имейте в виду, что многое из этой документации относится только к реализации Microsoft.

Выбор корневого узла

Как вы уже видели, выбрать корневой узел можно при помощи образца выбора «/», как, например:

<xsl:template match="/">

 <HTML>

<xsl:apply-templates/>

 </HTML>

</xsl:template>

Выбор элементов

Можно выбирать элементы, просто задавая их имена, как мы уже видели. Следующий шаблон выбирает элементы

<PLANETS>
:

<xsl:template match="PLANETS">

 <HTML>

<xsl:apply-templates/>

 </HTML>

</xsl:template>

Выбор дочерних элементов

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

<NAME>
, которые являются дочерними для элементов
<PLANET>
. Для этого можно задать выражение "
PLANET/NAME
". Вот правило, окружающее текст таких элементов в элемент HTML
<Н3>
:

<xsl:template match="PLANET/NAME">

 <H3>

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

 </H3>

</xsl:template>

Можно также использовать символ * в качестве символа-подстановки, что соответствует любому элементу. (* может выбирать только элементы, однако образец @* выбирает любой атрибут.) Например, следующее правило применяется ко всем элементам

<NAME>
, которые являются внуками элементов
<PLANET>
:

<xsl:template match="PLANET/*/NAME">

 <H3>

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

 </H3>

</xsl:template>

Выбор потомков элемента

В предыдущем разделе при помощи выражения "

PLANET/NAME
" я выбирал все элементы
<NAME>
, являющиеся прямыми потомками элементов
<PLANET>
, а при помощи выражения "
PLANET/*/NAME
" — все элементы
<NAME>
, являющиеся внуками элементов
<PLANET>
. Есть, однако, более простой способ выполнить оба выбора — применить выражение "
PLANET//NAME
", выбирающее все элементы
<NAME>
, находящиеся внутри элементов
<PLANET>
, независимо от глубины вложенности (соответствующие элементы называются потомками элемента
<PLANET>
). Иными словами, "
PLANET//NAME
" выбирает "
PLANET/NAME
", "
PLANET/*/NAME
", "
PLANET/*/*/NAME
" и т.д.:

<xsl:template match="PLANETS//NAME">

 <H3>

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

 </H3>

</xsl:template>

Выбор атрибутов

Как было показано в главе 3, «Создание и применение шаблонов», можно выбирать атрибуты, если предварять их имена префиксом @. Вы уже работали с атрибутом

UNITS
, который поддерживают большинство детей элементов
<PLANET>
:

  • Читать дальше
  • 1
  • ...
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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