Совпадающие элементы в шаблонах

Совпадающие элементы в шаблонах

Для указания того, с каким узлом или узлами вы хотите работать в шаблоне, в XSLT имеются разнообразные способы поиска или выбора узлов. Следует установить атрибут match элемента <xsl:template> в образец (pattern), определяющий имя узла или узлов, с которыми вы хотите работать. В главе 3, посвященной шаблонам, будет показано, как создавать образцы. Например, образец «/» соответствует корневому узлу; образец «*» задает любой узел элемента; образцу «PLANET» удовлетворяют все узлы элемента <PLANET> и т.д.

Для начала я создал короткий пример, заменяющий корневой узел, — а следовательно, и весь документ — на HTML-странице. Первое, что я сделал, — создал шаблон с элементом <xsl:template>, установив атрибут match в образец для совпадения

<?xml version="1.0">

<xsl:stylesheet version="1.0"

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

 <xsl:template match="/">

 .

 .

 .

 </xsl:template>

</xsl:stylesheet>

Когда устанавливается соответствие с корневым узлом, шаблон применяется к самому узлу. В данном случае (листинг 2.2) я хочу заменить корневой узел документом HTML, поэтому я только включу этот документ HTML непосредственно в качестве содержимого элемента <xsl:template>.

Листинг 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>.