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 ответил, что нет, такие ограничения появились из-за нехватки сил для реализации всей функциональности.