Что такое XSLT?

07fig01 — это мощное средство для трансформации -данных. Его часто используют как web-шаблонизатор: на вход подаётся -документ и -преобразование, а на выходе получают HTML-документ. Процесс получения HTML-документа из XML называют отображением или рендерингом.

Рассмотрим типичный пример рендеринга HTML.

 

Дан список музыкальных композиций в виде XML-документа.

<code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;PlayList&gt;
  &lt;Track Id="1170056tuNb" Length="280"&gt;
    &lt;Artist&gt;Рихард Вагнер&lt;/Artist&gt;
    &lt;Title&gt;Полёт валькирии&lt;/Title&gt;
  &lt;/Track&gt;
  &lt;Track Id="938304vu1E" Length="163"&gt;
    &lt;Artist&gt;Эдвард Григ&lt;/Artist&gt;
    &lt;Title&gt;В пещере горного короля&lt;/Title&gt;
  &lt;/Track&gt;
  &lt;Track Id="35532014SEz" Length="187"&gt;
    &lt;Artist&gt;Иоган Бах&lt;/Artist&gt;
    &lt;Title&gt;Токката и фуга ре-минор&lt;/Title&gt;
  &lt;/Track&gt;
  &lt;Track Id="264667GXiD" Length="203"&gt;
    &lt;Artist&gt;Антонио Вивальди&lt;/Artist&gt;
    &lt;Title&gt;Времена года. Лето. Шторм&lt;/Title&gt;
  &lt;/Track&gt;
  &lt;Track Id="613982Fj9E" Length="103"&gt;
    &lt;Artist&gt;Джузеппе Верди&lt;/Artist&gt;
    &lt;Title&gt;Триумфальный марш (Аида)&lt;/Title&gt;
  &lt;/Track&gt;
&lt;/PlayList&gt;</code>

Отобразим данный документ в виде HTML ul/li списка, как это показано ниже:

Список трэков в HTML формате

Для этого используем следующее XSLT-преобразование:

<code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;!DOCTYPE xsl:stylesheet [
  &lt;!ENTITY mdash "&amp;#8212;"&gt; ]&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
  &lt;xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/&gt;

  &lt;xsl:template match="/"&gt;
    &lt;xsl:apply-templates select="PlayList"/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="PlayList"&gt;
    &lt;ul&gt;
      &lt;xsl:apply-templates select="Track"/&gt;
    &lt;/ul&gt;
  &lt;/xsl:template&gt;
  &lt;xsl:template match="Track"&gt;
    &lt;li&gt;
      &lt;a href="http://prostopleer.com/tracks/{@Id}"&gt;
        &lt;xsl:value-of select="Artist"/&gt;
        &lt;xsl:text&gt; &amp;mdash; &lt;/xsl:text&gt;
        &lt;xsl:value-of select="Title"/&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;</code>

Данное преобразование вернёт нам следующий HTML:

<code>&lt;ul&gt;
  &lt;li&gt;
    &lt;a href="http://prostopleer.com/tracks/1170056tuNb"&gt;Рихард Вагнер — Полёт валькирии&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href="http://prostopleer.com/tracks/938304vu1E"&gt;Эдвард Григ — В пещере горного короля&lt;/a&gt;
  &lt;/li&gt;
   ...
&lt;/ul&gt;</code>

XSLT-преобразование состоит из трёх шаблонов (xsl:template). Каждый шаблон обслуживает свою сущность, что даёт нам возможность легко вносить изменения и делает код понятным.

Если нам надо поменять отображение списка (например, добавить атрибут class), то мы редактируем шаблон match="PlayList".

Если же мы хотим изменить отображение элементов списка, то тут, совершенно очевидно, что стоить менять шаблонmatch="Track"

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

Конечно, в более сложных случаях разделения добиться такого разделения бывает сложно. Очень легко прийти к ситуации, когда возникает «божественный шаблон», который делает всё, так же стоит бояться скатиться к «стрельбе дробью» кучей мелких шаблонов.

Запись навигация

Top