2.4 Структура преобразования

В заключительной частьи нашего представления XSLT мы посмотрим на содержание самих преобразований. Мы поясним всё в наших преобразованиях и обсудим другие подходы, которые мы могли бы применить.

2.4.1 Элемент <xsl:stylesheet>

Элемннт xsl:stylesheet — это обычно корневой элемент XSLT-преобразования.

<xsl:stylesheet
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   version="1.0">


Прежде всего, элемент xsl:stylesheet определяет версию XSLT, которую мы будем использовать, в соответствии с определением пространства имён xsl. Чтобы соответствовать спецификации XSLT, ваше преобразование всегда должно начинаться с этого элемента, определённого в точности так, как показано здесь. Некоторые процессоры, особенно Xalan, выдают предупреждающие сообщения, если ваш элемент xsl:stylesheet не содержит этих двух атрибутов с этими двумя значениями. Во всех примерах этой книги мы будем начинать преобразование с точно такого же элемента, определяя другие пространства имён в случае необходимости.

2.4.2 Элемент <xsl:output>

Далее мы определяем метод вывода. Спецификация XSLT задаёт три метода вывода: xml, html и text. Мы создаём HTML-документ, поэтому мы ходим использоваться метод вывода html. Вдобавок к этим трём методам XSLT-процессор может задавать свои собственные методы вывода, так что посмотрите документацию вашего XSLT-процессора на предмет каких-либо альтернатив.

<xsl:output method="html"/>

С разными методами вывода используются разные атрибуты. Например, если мы используем метод xml, мы можем использовать doctype-public и doctype-system, чтобы определить его как публичный или локальный для использования в DTD (Document Type Declaration). Если вы используете методы xml или html, вы можете воспользоваться атрибутом indent, чтобы задать возможность ставить или нет дополнительные пробелы при выводе. Обсуждение элемента xsl:output в приложении A рассматривает все эти детали.

2.4.3 Наш первый <xsl:template>

Наш первый шаблон будет на "/", это XPath выражение для корневого элемента документа.

<xsl:template match="/">
  <xsl:apply-templates select="greeting"/>
</xsl:template>

2.4.4 <xsl:template> для <greeting>

Второй <xsl:template> элемент обрабатывает люой элемент <greeting> в нашем исходном XML-документе.

<xsl:template match="greeting">
  <html>
    <body>
      <h1>
        <xsl:value-of select="."/>
      </h1>
    </body>
  </html>
</xsl:template>

2.4.5 Встроенные правила шаблонов

Хотя большинство преобразований, которые мы будем делать в этой книге, ясно определяют, как различные XML-элементы будут преобразованы, XSL задаёт несколько встроенных шаблонных правил, которые применяются при отсутствии каких-либо специальных правил. Эти правила имеют приоритет ниже, чем любые другие шаблоны, так что они всегда перезаписываются, когда вы задаёте свои собственные шаблоны. Встроенные шаблоны перечислены здесь.

2.4.5.1 Встроенное правило для элементов и корневого узла

Этот шаблон преобразует корневой элемент и любой из его потомков. Это преобразование гарантирует, что рекурсивное преобразование будет продолжено, даже если для данного элемента не определён никакой шаблон.

<xsl:template match="*|/">
  <xsl:apply-templates/>
</xsl:template>

Это означает, что если содержание документа выглядит так:

<?xml version="1.0"?>
<x>
  <y>
    <z/>
  </y>
</z>

2.4.5.2 Встроенные правила для mode

Этот шаблон гарантирует, что элемент или корневой узел обрабатывается, невзирая на то, что любой mode может иметь влияние. (Смотрите пункт 4.3.2 в главе 4 для подробной информации об атрибуте mode).

<xsl:template match="*|/" mode="x">
  <xsl:apply-templates mode="x"/>
</xsl:template>

2.4.5.3 Встроенный шаблон для текстовых узлов и атрибутов

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

<xsl:template match="text()|@*">
  <xsl:value-of select="."/>
</xsl:template>

2.4.5.4 Встроенный шаблон для комментариев и управляющих инструкций

Этот шаблон не делает ничего.

<xsl:template match="comment()|processing-instruction()"/>

Встроенный шаблон для пространств имён (namespace)

Этот шаблон не делает ничего.

<xsl:template match="namespace()"/>


Tags:
This entry was posted on Tuesday, June 8th, 2010 at 5:46 pm and is filed under Первое преобразование, введение. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

Your comment