Я только что обнаружил, что если main.xsl xsl: импортирует lib.xsl, который определяет некоторые функции XSLT2, эти функции нельзя использовать в main.xsl
Конечно, это не правда .
Взгляните на библиотеку FXSL , шаблоны которой содержат функции, которые должны быть импортированы с использованием кода XSLT. Модули таблиц стилей FXSL фактически импортируют другие модули таблиц стилей и используют их функции .
Вот простой пример:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f"
>
<xsl:import href="../f/func-foldl.xsl"/>
<xsl:import href="../f/func-Operators.xsl"/>
<!--
This transformation calculates 10!
Expected result: 3628800 or 3.6288E6
-->
<xsl:output encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:value-of select="f:foldl(f:mult(), 1, 1 to 10 )"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к любомуXML-документ (не используется), он рассчитывает 10!(10 факторных) значение:
3628800
Все три процессора XSLT 2.0, с которыми я работаю: Saxon 9, AltovaXML и XQSharp дают тот же результат.
Вот частичное представлениев иерархии импорта вышеуказанного преобразования :
![alt text](https://i.stack.imgur.com/ZAeD4.jpg)
Как мы видим, отображается только менее половины всего импорта ...:)
Конечно, здесь мы видим только импортированные шаблоны, но в каждом модуле импортированных таблиц стилей для каждого шаблона есть как минимум два <xsl:function>
s.