function milesToKilometers(e) {

    miles = parseInt(e.text);

    return miles * 1.6;

   }

  ]]>

 </xsl:script>

 <xsl:template match='/'>

  <HTML>

   <HEAD>

    <TITLE>

     The Planets Table

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     The Planets Table

    </H1>

    <TABLE BORDER='2'>

     <TR>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

     </TR>

     <xsl:apply-templates/>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match='PLANETS'>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='PLANET'>

  <TR>

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

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

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

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

  </TR>

 </xsl:template>

 <xsl:template match='RADIUS'>

  <xsl:eval>milesToKilometers(this)</xsl:eval>

 </xsl:template>

</xsl:stylesheet>

Вот и все, результат этого преобразования приведен на рис. 5.4.

Рис. 5.4. Применение функции расширения в Internet Explorer

Со временем производители будут поставлять все больше и больше функций расширения. Как можно определить, доступна ли заданная функция расширения? Для этого служит функция function- available.

Применение функции function-available

Функция XSLT 1.0 function-available служит для проверки доступности функции. В следующем примере я хочу воспользоваться функцией расширения starpowder:calculate для математических вычислений, а если она недоступна, я отправляю в результирующий документ текст «Sorry, can't do math today.» (Извините, сегодня математические вычисления не работают.), хотя можно, конечно, прекратить обработку и вывести сообщение об ошибке при помощи элемента <xsl:message>:

<xsl:choose xmlns:starpowder='http://www.starpowder.com'>

 <xsl:when test='function-available ('starpowder:calculate')'>

  <xsl:value-of select='starpowder:calculate('2+2')'/>

 </xsl:when>

 <xsl:otherwise>

  <xsl:text>Sorry, can't do math today.</xsl:text>

 </xsl:otherwise>

</xsl:choose>

Внешние объекты

В рабочем проекте XSLT 1.1 для поддержки функций расширения появился новый тип данных — внешний объект (external object). Переменной XSLT, о которой пойдет речь в главе 9, может быть присвоен внешний объект — так же, как и один из четырех типов данных XPath, поддерживаемых в XSLT (строка, число, логическое значение, набор узлов). Внешний объект представляет объект, который создается внешним языком программирования, возвращается функцией расширения и не может быть преобразован в один из четырех типов данных XPath. Тип данных «external object» был добавлен в XSLT для того, чтобы предоставить вам безопасную «оболочку» для таких данных. Пока еще никто не реализовал поддержку внешних объектов, но это ожидается в скором времени.

Элементы расширения

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

В рабочем проекте XSLT 1.1 правила определяли, что элементами расширения должны быть

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

0

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

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