Старая версия xmlhack.ru


[XML и язык программирования Перл][XSL[T|-FO]]  Расширения XSLT на Перле
  10.09.02 Паращенко Олег

Matt Sergeant сообщил о выходе Перлового модуля XML::LibXSLT 1.52. В новой версии появилась возможность вставлять в XSLT-преобразования вызовы функций Перла.

Выдержка из описания (конструкции вида =head2, C<..> - это элементы POD, языка разметки Перловой документации):

=head2 register_function

    XML::LibXSLT->register_function($uri, $name, $subref);

Регистрирует функцию расширения XSLT и привязывает её к заданному URI. Пример:

    XML::LibXSLT->register_function("urn:foo", "bar",
      sub { scalar localtime });

Приведённый код регистрирует функцию C<bar> в пространстве имён C<urn:foo> (оно объявляется в XSLT с помощью C<xmlns:...>), которая возвращает текущую дату и время в виде строки. Пример XSLT:

   <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:foo="urn:foo">
   <xsl:template match="/">
     The time is: <xsl:value-of select="foo:bar()"/>
   </xsl:template>
   </xsl:stylesheet>

Параметры, переданные в функцию, а также возвращаемое значение автоматически преобразуются в строки. Функция расширения не имеет доступа к nodelist'ам и прочим объектам XSLT-преобразования.

Конец выдержки.

Автор предупреждает, что он не провёл тщательного тестирования, и поэтому не гарантирует работоспособность модуля.

На вопрос, имеет ли принципиальное значение, что всё преобразуется в строку и функция не имеет доступ к объектам трансформации, Matt Sergeant ответил, что нет, такие ограничения появились из-за нехватки сил для реализации всей функциональности.