<TD><xsl:apply-templates select='MASS'/></TD>

   <TD><xsl:apply-templates select='RADIUS'/></TD>

   <TD><xsl:apply-templates select='DAY'/></TD>

  </TR>

 </xsl:template>

 <xsl:template match='MASS'>

  <xsl:value-of select='.'/>

  <xsl:text> </xsl:text>

  <xsl:value-of select='@UNITS'/>

 </xsl:template>

 <xsl:template match='RADIUS'>

  <xsl:value-of select='.'/>

  <xsl:text> </xsl:text>

  <xsl:value-of select='@UNITS'/>

 </xsl:template>

 <xsl:template match='DAY'>

  <xsl:value-of select='.'/>

  <xsl:text> </xsl:text>

  <xsl:value-of select='@UNITS'/>

 </xsl:template>

</xsl:stylesheet> 

А вот результат:

<?xml version='1.0' encoding-'UTF-8'?>

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'>

<HTML>

 <HEAD>

  <TITLE>

   The Planets Table

  </TITLE>

 </HEAD>

 <BODY>

  <H1>

   The Planets Table

   .

   .

   .

Далее в книге будут приведены другие примеры использования <xsl:text>, в том числе — при обсуждении символов-разделителей далее в этой главе.

Написание значений атрибутов

В XSLT есть несколько способов написать значения атрибутов в выходные документы, и наиболее мощный — это создать атрибуты с нуля при помощи элемента <xsl:attribute>, как мы увидим в главе 6.

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

Предположим, например, что нам требуется преобразовать текст в таких элементах, как <MASS>, <DAY> и <NAME>, в атрибуты элементов <PLANET>, преобразуя planets.xml в следующий вид:

<?xml version='1.0' encoding='UTF-8'?>

<PLANETS>

 <PLANET DAY='58.65 days' RADIUS='1516 miles'

  MASS='.0553 (Earth = 1)' NAME='Mercury'/>

 <PLANET DAY='116.75 days' RADIUS='3716 miles'

  MASS='.815 (Earth = 1)' NAME='Venus'/>

 <PLANET DAY='1 days' RADIUS='2107 miles'

  MASS='1 (Earth = 1)' NAME='Earth'/>

</PLANETS>

Чтобы создать преобразование, нельзя просто использовать следующее выражение, в котором я взял значения элементов <NAME>, <MASS> и <DAY> и попытался сделать их значениями атрибутов:

<xsl:template match='PLANET'>

 <PLANET NAME='<xsl:value-of select='NAME'/>'

  MASS='<xsl:value-of select='MASS'/>'

  DAY='<xsl:value-of select='DAY'/>'

/>

Это не будет работать, поскольку нельзя использовать < внутри значений атрибутов, как я сделал в предыдущем примере. В XSLT для этого есть несколько способов. Один из них — использовать шаблоны значений атрибутов. 

Шаблоны значений атрибутов

Шаблон имени значения атрибута не имеет ничего общего с теми шаблонами, с которыми мы до сих пор работали, — то есть с шаблонами для создания правил таблицы стилей. Напротив, применение шаблона значения атрибута (attribute value template) означает лишь, что значение атрибута может быть установлено во время выполнения.

В этом случае атрибут можно установить в значение выражения XPath (более подробно эта тема изучается в главе 4), если заключить выражение в фигурные скобки. Например, чтобы установить атрибут NAME в строковое значение элемента <DESCRIPTION>, дочернего элемента контекстного узла, это значение можно присвоить следующим образом: NAME= {DESCRIPTION}.

В листинге 3.5 приведен правильный код XSLT, в котором значения элементов <NAME>, <MASS>, <RADIUS> и <DAY> присваиваются атрибутам элемента <PLANET> с теми же именами.

Листинг 3.5. Работа с шаблонами значений атрибутов

<?xml version=1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:output method='xml'/>

 <xsl:template match='PLANETS'>

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

0

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

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