Листинг 2.2. Простейшее преобразование

<?xml version='1..0'?>

<xsl:stylesheet version='1.0'

 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

 <xsl:template match='/'>

  <HTML>

   <HEAD>

    <TITLE>

     A trivial transformation

    </TITLE>

   </HEAD>

   <BODY>

    This transformation has replaced the entire document.

   </BODY>

  </HTML>

 </xsl:template>

</xsl:stylesheet>

Результат: при помощи элемента <xsl:template> я установил правило в таблице стилей. Когда процессор XSL считывает документ, первым узлом является корневой узел. Это правило находит данный корневой узел, и от того процессор XSL копирует литералы в результирующее дерево, что даст нам HTML doc и заменит его документом HTML, генерируя следующий результат:

<HTML>

 <HEAD>

  <TITLE>

   A trivial transformation

  </TITLE>

 </HEAD>

 <BODY>

  This transformation has replaced the entire document.

 </BODY>

</HTML>

Рассмотренный пример иллюстрирует первое, устаревшее преобразование. Была создана простая таблица стилей с единственным элементом <xsl:template>, который содержит только элемент буквального результата. Все, что сделано в примере, — замена всего документа XML на документ HTML, что не очень впечатляет. Далее мы увидим, как работает рекурсивная обработка с использованием элемента <xsl:apply-templates>

Элемент <xsl:apply-templates>

В уже написанном нами основном шаблоне корневой узел искался по выражению '/' и заменялся на элемент буквального вывода. Однако, когда мы ищем корневой узел, обычно нам нужно обработать и всю оставшуюся часть документа, что мы сделаем при помощи элемента <xsl:apply- templates>.

В следующем списке перечислены атрибуты этого элемента:

• select (необязательный). Набор обрабатываемых узлов. Если атрибут опущен, автоматически обрабатываются все потомки узла. Устанавливается в выражение;

• mode (необязательный). Устанавливает режим обработки. К этому узлу применяются правила шаблона с режимом выбора. Принимает значение типа QName.

Элемент <xsl:apply-templates> может содержать ноль или более элементов <xsl:sort>, или ноль или более элементов <xsl:with-param>.

В следующем примере шаблон ищет корневой узел и замещает его элементом буквального результата <HTML>:

<?xml version='1.0'>

<xsl:stylesheet version='1.0'

 xmlns:xsl='http://ww.w3.org/1999/XSL/Transform'>

 <xsl:template match='/'>

  <HTML>

  </HTML>

 </xsl:template>

 .

 .

 .

С другой стороны, мы только нашли корневой узел, а дерево данных planets.xml имеет ряд узлов под корневым узлом:

<?xml version='1.0'?>

<?xml-stylesheet type='text/xml' href='planets.xsl'?>

<PLANETS>

 <PLANET>

  <NAME>Mercury</NAME>

  <MASS UNITS='(Earth = 1)'>.0553</MASS>

  <DAY UNITS='days'>58.65</DAY>

  <RADIUS UNITS='miles'>1516</RADIUS>

  <DENSITY UNITS='(Earth = 1)'>.983</DENSITY>

  <DISTANCE UNITS='million miles'>43.4</DISTANCE><!--B перигелии-- >

 </PLANET>

 .

 .

 .

Для обработки не только одного корневого узла можно использовать <xsl:apply- templates>, добавив этот элемент следующим образом:

<?xml version='1.0'>

<xsl:stylesheet version='1.0'

 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

 <xsl:template match='/'>

  <HTML>

   <xsl:apply-templates/>

  </HTML>

 </xsl:template>

 .

 .

 .

Этот элемент дает указание процессору XSLT просмотреть все дочерние узлы корневого узла и попытаться найти шаблон, которому эти узлы удовлетворяют. Например, вам может потребоваться заменить все элементы <PLANET> на <P>Planet</P>. Элементы <PLANET> — дочерние узлы элемента <PLANETS>, поэтому сначала

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

0

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

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