много примеров.

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>:

<PLANET>

 <NAME>Earth</NAME>

 <MASS UNITS='(Earth = 1)'>1</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>

Чтобы извлечь единицы измерения и отобразить их вместе со значениями массы и т.п., можно выбрать атрибут UNITS при помощи @UNITS (листинг 4.1).

Листинг 4.1. Выбор атрибутов

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату