Книга: Технология XSLT

Расширения

Расширения

MSXML поддерживает пользовательские функции расширения, которые могут быть написаны на скриптовых языках VBScript и JScript и включены непосредственно в сами преобразования.

Пример

Листинг П1.3. Входящий документ

<?xml version="1.0" encoding="windows-1251"?>
<page>Сегодня <date/>.</page>

Листинг П1.4. Преобразование

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
 xmlns:ext="urn:extension-functions"
 exclude-result-prefixes="msxsl ext">
 <xsl:output encoding="windows-1251"/>
 <msxsl:script
  language="JavaScript"
  implements-prefix="ext">
  function date() {
   now = new Date;
   return now.getDate() + '.' +
    (now.getMonth() + 1) + '.' +
    now.getYear();
  }
 </msxsl:script>
 <xsl:template match="/">
  <html>
   <head>
    <title>Today is page</title>
   </head>
   <body>
    <xsl:apply-templates/>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="date">
  <xsl:value-of select="ext:date()"/>
 </xsl:template>
</xsl:stylesheet>

Листинг П1.5. Выходящий документ

<html>
 <head>
  <META
   http-equiv="Content-Type"
   content="text/html;
   charset=windows-1251">
  <title>Today is page</title>
 </head>
 <body>Сегодня 18.10.2001.</body>
</html>

Как и во многих других процессорах, в MSXML предусмотрена функция расширения node-set, которая преобразует результирующий фрагмент дерева во множество узлов. Функция node-set принадлежит пространству имен с URI "urn:schemas-microsoft-com:xslt", и стандартным сценарием ее использования будет примерно следующий:

<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
 exclude-result-prefixes="msxsl ">
 <!-- ... -->
 <xsl:variable name="tree">
  <!-- Переменная, содержащая результирующий фрагмент дерева -->
  <item>A</item>
  <item>B</item>
 </xsl:variable>
 <!-- ... -->
 <xsl:template ... >
  <!-- Обращение к $tree, как ко множеству узлов -->
  <xsl:value-of select="msxsl:node-set($tree)/item[1]"/>
 </xsl:template>
</xsl:stylesheet>

К сожалению, текущая версия MSXML не поддерживает расширение пользовательскими элементами.

Оглавление книги

Оглавление статьи/книги

Генерация: 0.069. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз